【问题标题】:Firefox gives SyntaxError: invalid regexp groupFirefox 给出 SyntaxError: invalid regexp group
【发布时间】:2019-09-10 10:43:36
【问题描述】:

我几乎没有用于表单验证的正则表达式,我注意到我的项目无法通过 Firefox 访问,因为它什么也没显示!但在控制台中给出错误,SyntaxError: invalid regexp group

nicRegex 正在检查我所在国家/地区的国民身份证。格式应为937962723V937962723X 或根据当前格式的任何11 位数字。

phoneRegex 是用我的国家代码检查电话号码。 941212121210762323232

const nicRegex = /^(?:19|20)?\d{2}(?:[01235678]\d\d(?<!(?:000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)))\d{4}(?:[vVxX])$/;

【问题讨论】:

  • 您可以在控制台中逐个尝试以找出错误
  • 你至少应该知道 which REGEX 是有问题的。这将由附加到错误的行号表示。
  • 它没有给出任何特定的行号,但 bundle.js:1:34。 bundle.js的
  • nicRegex 包含一个否定的lookbehind - 这在FF 中不受支持。
  • 嗯,你需要重写它,这样它就不需要使用一个,你实际这样做的方式取决于你试图验证的格式规则。另见stackoverflow.com/questions/641407/…

标签: regex reactjs firefox regex-group


【解决方案1】:

TLDR;谨慎使用命名的捕获组(或者干脆不使用它们)

对我来说,这是因为我认为我会很聪明,并尝试在我的正则表达式中使用命名捕获组……Firefox 惩罚了我。

不起作用: /(?<text>[a-z]+)/

有效: /([a-z]+)/

【讨论】:

    【解决方案2】:

    此处使用否定的lookbehind(Safari 目前不支持)来限制前三个数字。负前瞻同样可以很好地执行此限制,只需将其放置在 3 位模式之前:

    (?:[0-35-8]\d\d(?<!(?:000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)))
    

    应该看起来像

    (?!000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)[0-35-8]\d\d
    

    注意这里的非捕获组是多余的,我删除了它们,[01235678] = [0-35-8]

    最终的正则表达式看起来像

    /^(?:19|20)?\d{2}(?!000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)[0-35-8]\d\d\d{4}[vVxX]$/
    

    查看regex demoRegulex graph

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 2022-06-28
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2019-07-29
      • 2020-12-24
      相关资源
      最近更新 更多