我需要一个可以匹配不以&字符开头的单词(不区分大小写)的正则表达式
例如搜索字符串 Foo
然后匹配将是这样的:
foo
Foo
Foo 吧
Bar Foo
Bar Foo 吧
$ Foo 吧
$ Foo $
Foo $ Foo % Foo &Foo Foo
使用负面的lookbehind断言,如下所示,
(?i)(?<!&)foo
Explanation:
(?i) 不区分大小写的修饰符 .
(?i)
(?<!&) 否定的lookbehind断言匹配将在 & 之前的任何字符之前 .
(?<!&)
&
foo 匹配字符串foo
DEMO
对于js,
/(?:[^&]|^)(foo)/igm
从组索引1获取所需的字符串 .
> var s = "Foo $Foo %Foo &Foo Foo"; undefined > var re = /(?:[^&]|^)(foo)/igm; undefined > var m; undefined > while ((m = re.exec(s)) != null) { ... console.log(m[1]); ... } Foo Foo Foo Foo
通过 string.replace 方法 .
string.replace
> var s = "Foo $Foo %Foo &Foo Foo"; undefined > s.replace(/([^&]|^)(foo)/igm, "$1bar") 'bar $bar %bar &Foo bar'
对于模式,这应该是Javascript友好的 . 它使用非捕获组并确保 foo 之前没有&符号(&)
(?:[^&])[fF][oO][oO]
非&符号的非foo字符将显示在匹配中,但不显示在结果/捕获中 .
编辑:您可以在您的JavaScript正则表达式语法中使用'i'标志来调用不区分大小写的模式modiefer . 那个模式就是 (?:[^&])foo
(?:[^&])foo
2 回答
使用负面的lookbehind断言,如下所示,
Explanation:
(?i)
不区分大小写的修饰符 .(?<!&)
否定的lookbehind断言匹配将在&
之前的任何字符之前 .foo
匹配字符串fooDEMO
对于js,
从组索引1获取所需的字符串 .
DEMO
通过
string.replace
方法 .对于模式,这应该是Javascript友好的 . 它使用非捕获组并确保
foo
之前没有&符号(&)非&符号的非foo字符将显示在匹配中,但不显示在结果/捕获中 .
编辑:您可以在您的JavaScript正则表达式语法中使用'i'标志来调用不区分大小写的模式modiefer . 那个模式就是
(?:[^&])foo