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})/;

另见