Firefox 给出 SyntaxError: invalid regexp group

Has*_*lva 7 regex firefox regex-group reactjs

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

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

phoneRegex 是用我的国家代码检查电话号码。94121212121或者0762323232

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])$/;

Nic*_*aly 6

TLDR;谨慎使用命名的捕获组(或只是不使用它们)

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

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

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


Wik*_*żew 5

这里使用负向后查找(Safari 目前不支持)来限制前三位数字。使用负前瞻可以同样很好地执行此限制,只需将其放置在3 位模式之前即可:

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

应该看起来像

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

请注意,这里的非捕获组是多余的,我删除了它们,并且[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]$/
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示Regulex 图

在此输入图像描述