Firefox提供SyntaxError:无效的regexp组

时间:2019-04-20 13:38:28

标签: regex reactjs firefox regex-group

我很少使用正则表达式进行表单验证,并且我注意到我的项目无法通过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])$/;

2 个答案:

答案 0 :(得分:3)

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

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

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

可以工作: /([a-z]+)/

答案 1 :(得分:0)

负向后搜索(Firefox当前不支持)用于限制前三位数字。可以使用负前瞻同样很好地执行此限制,只是需要将其放置在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

enter image description here