语法错误:正则表达式中捕获组名称无效
信息
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("|"),
);