2010-11-30 9 views

cevap

25
bar(?!.*bar) 

bir dizede geçen bar bulacaksınız: dize satır karakterlerini içerebilir Eğer

bar # Match bar 
(?! # but only if it's not followed by... 
.* # zero or more characters 
bar # literal bar 
)  # end of lookahead 

yerine

bar(?![\s\S]*bar) 

kullanın. [\s\S], yeni satırlar dahil herhangi bir karakterle eşleşir. Örneğin

:

match = subject.match(/bar(?![\s\S]*bar)/); 
if (match != null) { 
    // matched text: match[0] 
    // match start: match.index 
} 

Ayrıca kısmi eşleşmeleri önlemek için \b çapa ile (bunlar alfanümerik karakterden oluşan kelimeler gerçekten varsa) arama kelimeleri köşeli isteyebilirsiniz.

\bbar\b(?![\s\S]*\bbar\b) 

yerine yalnız bar maçları barfoobar içinde:

Don't match bar, do match bar, but not foobar! 
    no match---^  match---^ no match---^ 
+0

Noktalar, yeni satır karakterleriyle eşleşmediğinden sorunludur. –

+0

@Mike Samuels: İyi nokta; Bu dava için alternatif bir regex dahil ettik. –

+0

Ne, dizeyi ters çevirmiyor ve "rab" mı arıyorsun ??? +1 :) – zx81

0

Kullanım yerleşik işlev lastIndexOf:

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

son "sözcüğünü" bulmak istiyorsanız "çubuk":

(" "+"foo bar baz foo bar baz foo bar baz foo bar baz"+" ").lastIndexOf(" bar "); 
İlgili konular