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ı bar
foobar
içinde:
Don't match bar, do match bar, but not foobar!
no match---^ match---^ no match---^
Noktalar, yeni satır karakterleriyle eşleşmediğinden sorunludur. –
@Mike Samuels: İyi nokta; Bu dava için alternatif bir regex dahil ettik. –
Ne, dizeyi ters çevirmiyor ve "rab" mı arıyorsun ??? +1 :) – zx81