【问题标题】:How can I invert a regular expression in JavaScript?如何在 JavaScript 中反转正则表达式?
【发布时间】:2010-12-05 01:00:19
【问题描述】:

我有一个字符串 A 并想测试另一个字符串 B 是否不属于它。这是一个非常 简单的正则表达式,其结果可以在之后反转。

我能做到:

/foobar/.test('foobar@bar.de')

然后将其反转,如下所示:

!(/foobar/).test('foobar@bar.de') 

我遇到的问题是,我需要在正则表达式中执行此操作,而不是使用它们的结果。比如:

/!foobar/.test('foobar@bar.de')

(这不起作用)

换句话说:正则表达式应该测试不存在并在这种情况下返回true。

这可以用 JavaScript 实现吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    试试:

    /^(?!.*foobar)/.test('foobar@bar.de')
    

    一个(简短的)解释:

    ^          # start of the string 
    (?!        # start negative look-ahead
      .*       # zero or more characters of any kind (except line terminators)
      foobar   # foobar
    )          # end negative look-ahead
    

    因此,用简单的英语来说,如果字符串 'foobar' 可以“看到”,则该正则表达式将从字符串的开头查找。如果可以“看到”,则 no* 匹配。

    * 不匹配,因为它是 否定的 前瞻!

    更多关于这个前瞻的东西:http://www.regular-expressions.info/lookaround.html 但请注意,JavaScript 只支持前瞻,不支持前瞻,behinds

    【讨论】:

    • 很好 - 你能解释一下吗?
    • 谢谢我从未见过?!前。很好的答案
    • 太好了,这正是我所需要的。以前没有在 JavaScript 中尝试过负前瞻。非常感谢!
    • +1 我正在寻找你的正则表达式帖子来投票 - 看起来这是一个合适的帖子,因为它涉及环顾四周。再次感谢。
    • 我希望每次在 JS 中编写正则表达式时 JavaScript 都支持类似 perl 的正则表达式 cmets。
    【解决方案2】:
    ^(?!.*(word1|word2|word3))
    

    将匹配不包含任何word1word2word3 的字符串(并且您可以无限期地扩展列表)。 但这也匹配空字符串。要拒绝空值,请使用

    ^(?!$)(?!.*(word1|word2|word3))  
    

    【讨论】:

      【解决方案3】:

      这是一个不等式的例子。 首先我隔离了运算符“

      var _str = "a < b" ;
      var _op = /</g ;
      var _no_op = /[^(<|\ )]/g ;
      console.log( _str, _str.match( _op ) ); // get '<'
      console.log( _str, _str.match( _no_op ) ); // get 'a', 'b'
      

      P.s.:我只是在逆表达式中添加了空格,以便检索操作数的精确匹配。

      【讨论】:

        【解决方案4】:

        如果您要搜索的内容并不比“foobar”之类的简单字符串复杂:

        if (yourString.indexOf("foobar") === -1) {
          // ...
        }
        

        http://www.w3schools.com/jsref/jsref_indexOf.asp

        【讨论】:

        • 谢谢,但它需要是正则表达式,我只是稍微简化了示例。
        • 或 yourString.includes("foobar") :)
        猜你喜欢
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多