SyntaxError: invalid capture group name in regular expression

JavaScript 異常 "invalid capture group name in regular expression" 在命名捕獲組命名反向引用包含無效識別符號時發生。

訊息

SyntaxError: Invalid regular expression: /(?<1>)/: Invalid capture group name (V8-based)
SyntaxError: invalid capture group name in regular expression (Firefox)
SyntaxError: Invalid regular expression: invalid group specifier name (Safari)

錯誤型別

SyntaxError

哪裡出錯了?

每個命名捕獲組都必須有一個有效的識別符號作為名稱。你不能使用任意字串作為組識別符號。

示例

無效案例

js
/(?<1>\d+) (?<2>\d+)/;

或者你可能正在動態構建正則表示式

js
const tokenTypes = {
  "number literal": /\d+/,
  "string literal": /".+?"/,
  identifier: /[a-zA-Z_]\w*/,
};

const tokenPattern = new RegExp(
  Object.entries(tokenTypes)
    .map(([name, pattern]) => `(?<${name}>${pattern.source})`)
    .join("|"),
);

有效情況

js
/(?<group1>\d+) (?<group2>\d+)/;

如果正則表示式是動態構建的,請確保所有名稱都是有效的識別符號。例如:

js
const tokenTypes = {
  numberLiteral: /\d+/,
  stringLiteral: /".+?"/,
  identifier: /[a-zA-Z_]\w*/,
};

const tokenPattern = new RegExp(
  Object.entries(tokenTypes)
    .map(([name, pattern]) => `(?<${name}>${pattern.source})`)
    .join("|"),
);

另見