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

另見