语法错误:正则表达式中捕获组名称无效

命名捕获组命名反向引用 包含无效的 标识符 时,就会出现 JavaScript 异常 "正则表达式中命名捕获组名称无效"。

信息

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)

错误类型

出了什么问题?

每个命名捕获组都必须具有一个有效的标识符名称。不能使用任意字符串作为组标识符。

示例

无效情况

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("|"),
);

另请参阅