SyntaxError: invalid capture group name in regular expression
The JavaScript exception "invalid capture group name in regular expression" occurs when a named capturing group or named backreference contains an invalid identifier.
Message
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)
Error type
What went wrong?
Each named capturing group must have a name that is a valid identifier. You cannot use arbitrary strings as the group identifier.
Examples
Invalid cases
js
/(?<1>\d+) (?<2>\d+)/;
Or you might be building the regex dynamically:
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("|"),
);
Valid cases
js
/(?<group1>\d+) (?<group2>\d+)/;
If the regex is built dynamically, make sure the names are all valid identifiers. For example:
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("|"),
);