SyntaxError: invalid capture group name in regular expression

Ngoại lệ JavaScript "invalid capture group name in regular expression" xảy ra khi một nhóm bắt giữ được đặt tên hoặc tham chiếu ngược được đặt tên chứa một định danh không hợp lệ.

Thông báo

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)

Loại lỗi

SyntaxError

Điều gì đã xảy ra?

Mỗi nhóm bắt giữ được đặt tên phải có tên là một định danh hợp lệ. Bạn không thể sử dụng các chuỗi tùy ý làm định danh nhóm.

Ví dụ

Các trường hợp không hợp lệ

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

Hoặc bạn có thể đang xây dựng regex động:

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

Các trường hợp hợp lệ

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

Nếu regex được xây dựng động, hãy đảm bảo tất cả các tên đều là định danh hợp lệ. Ví 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("|"),
);

Xem thêm