匹配不以&开头的单词

时间:2014-11-24 11:17:36

标签: javascript regex

我需要一个能够匹配不以&开头的单词(不区分大小写)的正则表达式字符

例如搜索字符串 Foo

然后匹配就像:

  • FOO
  • Bar Foo
  • 酒吧的
  • Bar Foo bar
  • $的
  • $的 $
  • Foo $ Foo Foo & Foo Foo

2 个答案:

答案 0 :(得分:2)

使用下面的负面后瞻断言,

(?i)(?<!&)foo

<强>解释

  • (?i)不区分大小写的修饰符。
  • (?<!&)负面后卫声称该匹配将以&字符之前的任何字符开头。
  • foo匹配字符串foo

DEMO

对于js,

/(?:[^&]|^)(foo)/igm

从组索引1中获取所需的字符串。

DEMO

> 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方法。

> var s = "Foo $Foo %Foo &Foo Foo";
undefined
> s.replace(/([^&]|^)(foo)/igm, "$1bar")
'bar $bar %bar &Foo bar'

答案 1 :(得分:1)

对于模式,这应该是Javascript友好的。它使用非捕获组,并确保foo之前没有&符号(&amp;)

(?:[^&])[fF][oO][oO]

非&符号的非foo字符将显示在匹配中,但不显示在结果/捕获中。

编辑:您可以在javascript正则表达式语法中使用“i”标志来调用不区分大小写的模式modiefer。那么模式就是(?:[^&])foo