regexp匹配序列,如果不是以特定字符开头和结尾

时间:2017-07-06 17:07:09

标签: javascript regex

当谈到正则表达式时,我并不擅长找到一个有效且适合我需要的单词。如果一个字符不包括在[和另一个字符]之间,我需要匹配一个单词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"
 })

但我不知道怎么把它们放在一起。谢谢你!

3 个答案:

答案 0 :(得分:0)

请尝试将其与[和]

之间的单词匹配
"[foo] foo".match(/\[.*?\]/g)

答案 1 :(得分:0)

您需要以下正则表达式:

(?<!\[)foo(?!])

它对[具有负面的后瞻性,对]具有负前瞻性。

答案 2 :(得分:0)

使用否定前瞻可以使用此正则表达式:

var repl = str.replace(/\bfoo\b(?![^\]\[]*\])/g, 'bar');

RegEx Demo

(?![^\]\[]*\])是一个负前瞻性断言。当它在路上找不到]而没有匹配[]时就断言失败,因此不匹配foo内的[...]

\b用于字边界。