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