SyntaxError: duplicate capture group name in regular expression
Ngoại lệ JavaScript "duplicate capture group name in regular expression" xảy ra khi một mẫu biểu thức chính quy chứa hai hoặc nhiều named capturing group có cùng tên, và các nhóm bắt này có thể khớp cùng một lúc.
Thông báo
SyntaxError: Invalid regular expression: /(?<a>)(?<a>)/: Duplicate capture group name (V8-based) SyntaxError: duplicate capture group name in regular expression (Firefox) SyntaxError: Invalid regular expression: duplicate group specifier name (Safari)
Loại lỗi
SyntaxError
Điều gì đã xảy ra?
Tất cả các named capturing group trong một mẫu biểu thức chính quy phải có tên duy nhất. Một tính năng mới hơn cho phép các named capturing group chia sẻ tên, miễn là chúng thuộc các disjunction alternative khác nhau và không thể khớp cùng một lúc (xem khả năng tương thích trình duyệt cho tính năng này). Tuy nhiên, vẫn là lỗi nếu các named capturing group có cùng tên có thể khớp cùng một lúc, vì điều đó sẽ làm cho các tính năng khác như named backreference trở nên mơ hồ.
Ví dụ
>Các trường hợp không hợp lệ
js
/(?<name>\w+) (?<name>\w+)/;
Các trường hợp hợp lệ
js
/(?<firstName>\w+) (?<lastName>\w+)/;
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;