2016-06-27 7 views
0

Ich habe eine Zeichenfolge key word word und ich möchte die erste word basierend auf der Tatsache, dass es direkt nach key platziert ist.Wie wird nach Text gesucht, aber von regulären regulären Ausdrücken ausgeschlossen?

Ich habe versucht, diese Regex /(?:key\s)word/g und dachte, dass nicht einfangende Gruppen nicht im Spiel angezeigt werden. Aber die Regex entspricht key word (mit string.match()), was nicht das gewünschte Ergebnis ist.

Wie kann ich einen regulären Ausdruck in JavaScript schreiben, wo es für key hinter word sieht, schließt aber key aus dem Spiel?

(Zusatzfrage: Was ist der genaue Unterschied zwischen nicht-einfangende Gruppen (?:) und einfangenden Gruppen ())

+0

Verwendung Erfassung Gruppe statt: - '(?: Schlüssel \ n) (?: Schlüssel \ n) (Wort)' – rock321987

+0

Das ist nicht, da der Ausgang hilft ist die gleiche wie 'word' –

+0

Sie haben um auf die erste Capturing-Gruppe zuzugreifen, wie von @Avinash in seiner Antwort gezeigt – rock321987

Antwort

2

Verwendung exec Funktion, die in dem eine Anordnung liefert das erste Element das gesamte Spiel zeigt, wo die zweite Element zeigt auf die Zeichen, die von der ersten Erfassungsgruppe erfasst wurden.

> var s = 'key word word' 
> /\bkey\s+(\w+)/.exec(s) 
[ 'key word', 'word', index: 0, input: 'key word word' ] 
> /\bkey\s+(\w+)/.exec(s)[1] 
'word' 
> /\bkey\s+(word)/.exec(s)[1] 
'word' 
+0

Das ist eine gute Alternative, aber gibt es irgendwelche einheimischen Möglichkeiten, es zu tun? Etwas wie '? <=' In PHP ... –

+0

Keine andere Methode als Capturing Group .. –