2010-11-30 3 views

Antwort

25
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---^ 
+0

Die Punkte sind problematisch, da sie keine Newline-Zeichen enthalten. –

+0

@Mike Samuels: Guter Punkt; habe eine alternative Regex für diesen Fall enthalten. –

+0

Was, du drehst die Saite nicht um und suchst nach "rab" ??? +1 :) – zx81

0

Über die eingebaute Funktion lastIndexOf:

"foo bar baz foo bar baz foo bar baz foo bar baz".lastIndexOf("bar"); 

Wenn Sie das letzte "Wort" finden möchten "bar":

(" "+"foo bar baz foo bar baz foo bar baz foo bar baz"+" ").lastIndexOf(" bar "); 
Verwandte Themen