Hiểu biết của bạn sai. Nhóm sẽ vẫn là một phần của hoạt động chụp chính, nhưng nó sẽ không được tính là bắt giữ biểu thức phụ. Sau đây sẽ trả về một mảng của hai kết quả phù hợp:
x = "abcdefg"
x = x.match(/ab(cd)ef/)
Chỉ số mảng 0 sẽ là "abcdef" (đối sánh hoàn chỉnh) và chỉ mục mảng 1 sẽ là "cd", biểu thức phụ. Việc thêm ?:
yêu cầu regex không quan tâm đến việc nắm bắt biểu thức con, toàn bộ kết quả phù hợp vẫn được chụp hoàn toàn.
Từ các nhận xét khác của bạn, có một số cách bạn có thể làm những gì bạn đang cố gắng làm. Ví dụ:
x.replace(/(ab)cd(ef)/, "$1$2");
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2);
Nguồn
2010-03-29 23:11:04
Vì vậy, để đạt được những gì tôi muốn, tôi phải làm một = x.match (/ (ab) (?: cd) (ef) /); x = a [1] + a [2]; chính xác? – Murali
@wizard: Bạn có thể làm điều đó, có, nhưng nhóm không bắt giữ không cần thiết cho biểu thức cụ thể đó. '/ (ab) cd (ef) /' sẽ làm cùng một công việc. 'x.replace (/ (ab) cd (ef) /," $ 1 $ 2 ");' sẽ làm tốt hơn, nhưng tôi tưởng tượng biểu hiện thực sự của bạn phức tạp hơn một chút so với ví dụ của bạn ở đây :-). –