【问题标题】:Regex - Invalid Quantifier正则表达式 - 无效的量词
【发布时间】:2014-06-03 15:58:38
【问题描述】:

我在 JavaScript 中使用这个正则表达式来评估给定的字符串是否与某些德国电话号码模式匹配。

var reg = new RegExp("(?:\+\d+)?\s*(?:\(\d+\)\s*(?:[/–-]\s*)?)?\d+(?:\s*(?:[\s/–-]\s*)?\d+)*");

使用它时出现此错误:

SyntaxError: invalid quantifier

...eg = new RegExp("(?:\+\d+)\s*(?:\(\d+\)\s*(?:[/–-]\s*))\d+(?:\s*(?:[\s/–-]\s*)\d...

我正在努力学习阅读正则表达式,但还不能完全理解它们。这个表达式不是我自己写的,我很难理解。

为什么我会收到此错误?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    因为您使用的是字符串,所以您需要转义每个反斜杠:

    (?:\\+\\d+)?\\s*(?:\\(\\d+\\)\\s*(?:[/–-]\\s*)?)?\\d+(?:\\s*(?:[\\s/–-]\\s*)?\\d+)*
    

    另一种解决方案是使用正则表达式:

    var reg = /(?:\+\d+)?\s*(?:\(\d+\)\s*(?:[\/–-]\s*)?)?\d+(?:\s*(?:[\s\/–-]\s*)?\d+)*/;
    

    【讨论】:

      【解决方案2】:

      new RegExp 需要一个字符串,并且由于反斜杠在字符串中已经有意义,因此需要再次对其进行转义。

      但是,在您的情况下,您使用的是静态模式,因此最好使用文字:

      var reg = /(?:\+\d+)?\s*(?:\(\d+\)\s*(?:[\/–-]\s*)?)?\d+(?:\s*(?:[\s\/–-]\s*)?\d+)*/;
      

      请注意,您需要在此处转义 / ;)

      作为一个额外的提示,您可以通过像 [+] 对文字 + 执行类似操作,在一定程度上简化逃避事情的需要。我认为它看起来比\+ 更好,但这只是我的意见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-12
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 2011-08-09
        相关资源
        最近更新 更多