วงเล็บที่ไม่เก็บบันทึกใน Regular Expressions ของ JavaScript
วงเล็บ ( ) ทำหน้าที่สองอย่าง คือ
การจัดกลุ่มตัวอักษรและการทำหน้าที่เป็น capturing group (กลุ่มที่จับค่าไว้)
แต่ถ้าเราต้องการจัดกลุ่ม โดยไม่ต้องการจับค่าไว้ล่ะ?
เพื่อแก้ปัญหานี้ จึงมีการคิดค้น
วงเล็บที่ไม่เก็บบันทึก (?: ) ขึ้นมา
- มันทำหน้าที่จัดกลุ่ม แต่ไม่จับค่าใส่ capturing group
ตัวอย่าง
ในตัวอย่างต่อไปนี้ วงเล็บคู่แรกเราต้องการ เพื่อการจัดกลุ่ม และวงเล็บคู่ที่สอง - เพื่อจับค่าไว้ อย่างไรก็ตาม วงเล็บทั้งสองคู่ต่างก็เก็บบันทึกข้อมูล ลงใน capturing group:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
ผลลัพธ์ใน capturing groups ของเราจะเป็นดังนี้:
console.log(res[0]); // จะแสดง 'abab123'
console.log(res[1]); // จะแสดง 'ab'
console.log(res[2]); // จะแสดง '123'
ตัวอย่าง
มาทำให้วงเล็บคู่แรกทำหน้าที่เพียงแค่ จัดกลุ่มเท่านั้น แต่ไม่จับค่าใส่ capturing group:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
ผลลัพธ์ใน capturing group แรกจะเป็นตัวเลขของเรา:
console.log(res[1]); // จะแสดง '123'