首页 文章

匹配不以&开头的单词

提问于
浏览
0

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

例如搜索字符串 Foo

然后匹配将是这样的:

  • foo

  • Foo

  • Foo

  • Bar Foo

  • Bar Foo

  • Bar Foo

  • $ Foo

  • $ Foo $

  • Foo $ FooFoo &Foo Foo

2 回答

  • 2

    使用负面的lookbehind断言,如下所示,

    (?i)(?<!&)foo
    

    Explanation:

    • (?i) 不区分大小写的修饰符 .

    • (?<!&) 否定的lookbehind断言匹配将在 & 之前的任何字符之前 .

    • 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

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

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

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

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

相关问题