วิธีการ exec ใน Regular Expression ของ JavaScript
เมธอด exec ดำเนินการค้นหาตาม
สตริง ผลลัพธ์ที่ได้คือสตริงย่อยที่พบ
และกลุ่มที่จับได้ (capturing groups) นอกจากนี้
การเรียกใช้เมธอดนี้ในครั้งต่อๆ ไป
จะเริ่มค้นหาจากตำแหน่ง
ที่สตริงย่อยที่พบในครั้งก่อนหน้า
สิ้นสุดลง
มาดูตัวอย่างกัน สมมติว่าเรามีสตริงต่อไปนี้:
let str = '12 34 56';
สมมติว่าเรามี Regular Expression ต่อไปนี้:
let reg = /\d+/g;
ลองเรียกใช้เมธอดของเราตามลำดับ สำหรับสตริงของเรา:
let res1 = reg.exec(str);
console.log(res1[0]); // 12
let res2 = reg.exec(str);
console.log(res2[0]); // 34
let res3 = reg.exec(str);
console.log(res3[0]); // 56
หลังจากการเรียกใช้สามครั้ง เนื่องจากใน
สตริงของเราไม่มีส่วนที่ตรงกับ Regular Expression อีกแล้ว
การเรียกใช้เมธอดครั้งต่อไปจะคืนค่า
null:
let res4 = reg.exec(str);
console.log(res4); // null
คุณลักษณะเฉพาะของเมธอดนี้สะดวกต่อการนำไป ใช้งานในลูป:
let str = '12 34 56';
let reg = /\d+/g;
let res;
while (res = reg.exec(str)) {
console.log(res); // [12], [34], [56]
}
ไม่เพียงแต่ค้นหาส่วนที่ตรงกันได้เท่านั้น แต่ยังสามารถแยกส่วนนั้นออกเป็นกลุ่ม (capturing groups) ได้:
let str = '12 34 56';
let reg = /(\d)(\d)/g;
let res;
while (res = reg.exec(str)) {
console.log(res); // [12, 1, 2], [34, 3, 4], [56, 5, 6]
}
กำหนดสตริงต่อไปนี้:
let str = '12:37:57 15:48:58 17:59:59';
จงค้นหาสตริงย่อยทั้งหมดที่เป็นเวลา และสำหรับแต่ละค่าที่พบ ให้แยก ชั่วโมง นาที และวินาที ออกเป็นกลุ่ม (capturing groups)