当谈到正则表达式时,我并不擅长找到一个有效且适合我需要的单词。如果一个字符不包括在[和另一个字符]之间,我需要匹配一个单词foo。
"[foo] foo" // I need to replace foo with bar
// expected result : "[foo] bar" but not "[bar] bar"
如果不是跟随 by]
,我知道如何匹配它 "foo] foo".replace(/foo(!?\])/g,"bar")
我也知道如果
之后如何匹配它 " [foo foo".replace(/(\[)?foo/g,function(_0,_1) {
return _1:_0?"bar"
})
但我不知道怎么把它们放在一起。谢谢你!
答案 0 :(得分:0)
请尝试将其与[和]
之间的单词匹配"[foo] foo".match(/\[.*?\]/g)
答案 1 :(得分:0)
您需要以下正则表达式:
(?<!\[)foo(?!])
它对[
具有负面的后瞻性,对]
具有负前瞻性。
答案 2 :(得分:0)
使用否定前瞻可以使用此正则表达式:
var repl = str.replace(/\bfoo\b(?![^\]\[]*\])/g, 'bar');
(?![^\]\[]*\])
是一个负前瞻性断言。当它在路上找不到]
而没有匹配[
或]
时就断言失败,因此不匹配foo
内的[...]
。
\b
用于字边界。