SyntaxError: duplicate capture group name in regular expression
当正则表达式模式包含两个或多个具有相同名称的命名捕获组,并且这些捕获组可能同时被匹配时,就会发生 JavaScript 异常“正则表达式中存在重复的捕获组名称”。
消息
SyntaxError: Invalid regular expression: /(?<a>)(?<a>)/: Duplicate capture group name (V8-based) SyntaxError: duplicate capture group name in regular expression (Firefox) SyntaxError: Invalid regular expression: duplicate group specifier name (Safari)
错误类型
SyntaxError
哪里出错了?
正则表达式模式中的所有命名捕获组都必须具有唯一的名称。最近的一项功能允许命名捕获组共享名称,只要它们属于不同的或运算符备选项,并且不能同时匹配(有关此内容的更多信息,请参阅浏览器兼容性)。但是,如果具有相同名称的命名捕获组可以同时匹配,仍然会报错,因为这会使其他功能(例如命名反向引用)变得模糊不清。
示例
无效案例
js
/(?<name>\w+) (?<name>\w+)/;
有效情况
js
/(?<firstName>\w+) (?<lastName>\w+)/;
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;