Ответ 1
bar(?!.*bar)
найдет последний bar
в строке:
bar # Match bar
(?! # but only if it not followed by...
.* # zero or more characters
bar # literal bar
) # end of lookahead
Если ваша строка может содержать символы новой строки, используйте
bar(?![\s\S]*bar)
вместо этого. [\s\S]
соответствует любому символу, включая символы новой строки.
Например:
match = subject.match(/bar(?![\s\S]*bar)/);
if (match != null) {
// matched text: match[0]
// match start: match.index
}
Вы также можете объединить ваши слова поиска (если они действительно слова, состоящие из буквенно-цифровых символов) с якорями \b
, чтобы избежать частичных совпадений.
\bbar\b(?![\s\S]*\bbar\b)
совпадает с одиночным bar
вместо bar
внутри foobar
:
Don't match bar, do match bar, but not foobar!
no match---^ match---^ no match---^