假设我有一个字符串
foo bar baz foo bar baz foo bar baz foo bar baz
Run Code Online (Sandbox Code Playgroud)
我想找到最后一次出现的酒吧,我怎样才能有效地做到这一点?我需要循环添加匹配吗?在.NET中我可以在JS中进行RightToLeft搜索,我想我不能?
Tim*_*ker 26
bar(?!.*bar)
Run Code Online (Sandbox Code Playgroud)
会bar在字符串中找到最后一个:
bar # Match bar
(?! # but only if it's not followed by...
.* # zero or more characters
bar # literal bar
) # end of lookahead
Run Code Online (Sandbox Code Playgroud)
如果您的字符串可能包含换行符,请使用
bar(?![\s\S]*bar)
Run Code Online (Sandbox Code Playgroud)
代替.[\s\S]匹配任何字符,包括换行符.
例如:
match = subject.match(/bar(?![\s\S]*bar)/);
if (match != null) {
// matched text: match[0]
// match start: match.index
}
Run Code Online (Sandbox Code Playgroud)
您可能还希望将搜索词(如果它们确实是由字母数字字符组成的单词)与\b锚点包围以避免部分匹配.
\bbar\b(?![\s\S]*\bbar\b)
Run Code Online (Sandbox Code Playgroud)
匹配孤独bar而不是bar内部foobar:
Don't match bar, do match bar, but not foobar!
no match---^ match---^ no match---^
Run Code Online (Sandbox Code Playgroud)