语法错误:正则表达式中重复的捕获组名称

当正则表达式模式包含两个或多个 命名捕获组 具有相同的名称,并且这些捕获组可以同时匹配时,就会出现 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)

错误类型

出了什么问题?

正则表达式模式中的所有 命名捕获组 必须具有唯一的名称。更近期的功能允许命名捕获组共享名称,只要它们属于不同的 析取备选 并且不能同时匹配(参见 浏览器兼容性)。但是,如果具有相同名称的命名捕获组可以同时匹配,则仍然会出错,因为这会使其他功能(如 命名反向引用)变得模棱两可。

示例

无效案例

js
/(?<name>\w+) (?<name>\w+)/;

有效案例

js
/(?<firstName>\w+) (?<lastName>\w+)/;
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;

另请参阅