2010-12-31 13 views
24

mi chiedevo come usare un'espressione regolare per abbinare una frase che viene dopo una certa partita. Come:Javascript Regexp - Partita di personaggi dopo una certa frase

var phrase = "yesthisismyphrase=thisiswhatIwantmatched"; 
var match = /phrase=.*/; 

che abbinerà dal phrase= alla fine della stringa, ma è possibile ottenere tutto dopo la phrase= senza dover modificare una stringa?

risposta

39

Si utilizza capture groups (indicate con parentesi).

Quando si esegue la regex tramite la funzione match o exec, viene restituito un array costituito dalle sottostringhe catturate dai gruppi di cattura. È quindi possibile accedere a ciò che viene catturato tramite quella matrice. Ad esempio:

var phrase = "yesthisismyphrase=thisiswhatIwantmatched"; 
var myRegexp = /phrase=(.*)/; 
var match = myRegexp.exec(phrase); 
alert(match[1]); 

o

var arr = phrase.match(/phrase=(.*)/); 
if (arr != null) { // Did it match? 
    alert(arr[1]); 
} 
+1

non c'è un modo per evitare di usare quella 'match [1]'? – Vandervals

8
phrase.match(/phrase=(.*)/)[1] 

rendimenti

"thisiswhatIwantmatched" 

Le staffe specificano un cosiddetto gruppo di cattura. I contenuti dei gruppi di cattura vengono inseriti nell'array risultante, a partire da 1 (0 è l'intera corrispondenza).

+4

E 'importante rendersi conto della '' .match' restituisce nulla 'se la partita fallisce, quindi provare per quello prima di provare a ottenere il primo indice è una buona idea. Inoltre, se hai più di una fase in quella chiave = stringa di valore, puoi cambiare la regex in '/ phrase = (. *?) (; | $) /' Dove; è il delimitatore. Inoltre, puoi astrarre questo con un metodo usando il costruttore RegEx ... – Hemlock

0

Let provare questo, spero che funziona

var p = /\b([\w|\W]+)\1+(\=)([\w|\W]+)\1+\b/; 
 
console.log(p.test('case1 or AA=AA ilkjoi')); 
 
console.log(p.test('case2 or AA=AB')); 
 
console.log(p.test('case3 or 12=14'));

Problemi correlati