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

See also