bar(?!.*bar)
die letzte bar
in einem String finden:
bar # Match bar
(?! # but only if it's not followed by...
.* # zero or more characters
bar # literal bar
) # end of lookahead
Wenn Zeichenfolge Zeilenumbrüche enthalten kann, statt
bar(?![\s\S]*bar)
verwenden. [\s\S]
entspricht einem beliebigen Zeichen, einschließlich Zeilenumbrüchen.
Zum Beispiel:
match = subject.match(/bar(?![\s\S]*bar)/);
if (match != null) {
// matched text: match[0]
// match start: match.index
}
Sie können auch Ihre Suche Worte umgeben wollen (wenn sie in die Tat Worte bestanden aus alphanumerischen Zeichen) mit \b
Ankern teilweise Übereinstimmungen zu vermeiden.
\bbar\b(?![\s\S]*\bbar\b)
entspricht dem einsamen bar
statt der bar
innerhalb foobar
:
Don't match bar, do match bar, but not foobar!
no match---^ match---^ no match---^
Die Punkte sind problematisch, da sie keine Newline-Zeichen enthalten. –
@Mike Samuels: Guter Punkt; habe eine alternative Regex für diesen Fall enthalten. –
Was, du drehst die Saite nicht um und suchst nach "rab" ??? +1 :) – zx81