2010-12-31 10 views
24

Zastanawiam się, jak użyć wyrażeń regularnych, aby dopasować wyrażenie, które pojawia się po określonym dopasowaniu. Jak:Regexp JavaScript - Dopasuj znaki po określonej frazie

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

który będzie pasował z phrase= do końca łańcucha, ale jest to możliwe, aby wszystko po phrase= bez konieczności modyfikowania ciąg?

Odpowiedz

39

Używasz capture groups (oznaczony nawiasem).

Po uruchomieniu wyrażenia regularnego za pomocą funkcji match lub exec zwracana jest tablica składająca się z podciągów przechwyconych przez grupy przechwytywania. Możesz wtedy uzyskać dostęp do tego, co zostało przechwycone przez tę tablicę. Np:

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

lub

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

nie ma sposobu na uniknięcie użycia 'match [1]'? – Vandervals

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

powraca

"thisiswhatIwantmatched" 

Wsporniki określić tak zwaną grupę przechwytywania. Zawartość grup przechwytywania umieszczana jest w wynikowej tablicy, zaczynając od 1 (0 oznacza całe dopasowanie).

+4

Ważne jest realizacja '' .match' zwraca wartość null 'jeśli mecz się nie powiedzie, przetestuj to przed próbą uzyskania pierwszego indeksu jest dobrym pomysłem. Ponadto, jeśli masz więcej niż jedną fazę w łańcuchu klucz = wartość, możesz zmienić wyrażenie regularne na '/ phrase = (. *?) (; | $) /' Where; jest ogranicznikiem. Co więcej, możesz to zoptymalizować za pomocą metody używającej konstruktora RegEx ... – Hemlock

0

Niech spróbować tego, mam nadzieję, że to działa

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'));

Powiązane problemy