假设我有一个字符串
foo bar baz foo bar baz foo bar baz foo bar baz
我想找到最后一次出现的酒吧,我怎样才能有效地做到这一点?我需要循环添加匹配吗?在.NET中,我可以在JS中进行RightToLeft搜索,我想我不能?
答案 0 :(得分:25)
bar(?!.*bar)
会在字符串中找到最后一个bar
:
bar # Match bar
(?! # but only if it's 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---^
答案 1 :(得分:0)
使用内置函数lastIndexOf
:
"foo bar baz foo bar baz foo bar baz foo bar baz".lastIndexOf("bar");
如果你想找到最后一个"字" "杆":
(" "+"foo bar baz foo bar baz foo bar baz foo bar baz"+" ").lastIndexOf(" bar ");