Spec-Zone.ru › JavaScript

SyntaxError: недопустимое имя группы захвата в регулярном выражении

Исключение 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

Что пошло не так?

Каждая именованная группа захвата должна иметь имя, которое является допустимым идентификатором. Вы не можете использовать произвольные строки в качестве идентификатора группы.

Примеры

Недопустимые случаи

/(?<1>\d+) (?<2>\d+)/;

Или вы можете создавать регулярное выражение динамически:

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

Допустимые случаи

/(?<group1>\d+) (?<group2>\d+)/;

Если регулярное выражение создается динамически, убедитесь, что имена являются допустимыми идентификаторами. Например:

const tokenTypes = {
  numberLiteral: /\d+/,
  stringLiteral: /".+?"/,
  identifier: /[a-zA-Z_]\w*/,
};

const tokenPattern = new RegExp(
  Object.entries(tokenTypes)
    .map(([name, pattern]) => `(?<${name}>${pattern.source})`)
    .join("|"),
);

См. также

  • Регулярные выражения
  • Именованная группа захвата: (?<name>...)

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Regex_invalid_capture_group_name

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API