Dấu ngoặc không lưu trữ trong biểu thức chính quy JavaScript
Dấu ngoặc ( ) thực hiện hai chức năng -
nhóm các ký tự và chức năng "nhóm bắt". Vậy
phải làm sao nếu chúng ta cần nhóm,
nhưng không muốn đưa vào nhóm bắt?
Để giải quyết vấn đề này, người ta đã nghĩ ra
dấu ngoặc không lưu trữ (?: )
- chúng nhóm lại, nhưng không đưa vào nhóm bắt.
Ví dụ
Trong ví dụ tiếp theo, cặp ngoặc đầu tiên chúng ta cần để nhóm, còn cặp thứ hai - cho nhóm bắt. Tuy nhiên, cả hai cặp ngoặc đều lưu dữ liệu vào nhóm bắt:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Kết quả trong các nhóm bắt của chúng ta sẽ như sau:
console.log(res[0]); // sẽ hiển thị 'abab123'
console.log(res[1]); // sẽ hiển thị 'ab'
console.log(res[2]); // sẽ hiển thị '123'
Ví dụ
Hãy làm sao để cặp ngoặc đầu tiên chỉ nhóm, nhưng không đưa vào nhóm bắt:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Kết quả trong nhóm bắt đầu tiên sẽ là số của chúng ta:
console.log(res[1]); // sẽ hiển thị '123'