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