กลุ่มจับในตัว Regular Expression เองใน JavaScript
เนื้อหาของกลุ่มจับสามารถใช้งานได้ไม่เพียงแต่ใน สตริงสำหรับการแทนที่ แต่ยังสามารถใช้ในตัว Regular Expression เองได้: เรา สามารถเก็บบางสิ่งไว้ในกลุ่มจับ แล้วหลังจากนั้น ภายใน Regular Expression นั้นสามารถระบุได้ว่า ตรงนี้ควรมี เนื้อหาของกลุ่มจับนั้น
เนื้อหาของกลุ่มจับสามารถอ้างอิงได้โดยใช้หมายเลขของกลุ่มจับ
โดยมีเครื่องหมายแบ็กสแลชนำหน้า ตัวอย่างเช่น
กลุ่มจับแรกจะสามารถอ้างอิงได้ดังนี้: \1
กลุ่มจับที่สองดังนี้ - \2 กลุ่มที่สาม
- \3 และต่อๆ ไป
ฉันมั่นใจว่าทุกสิ่งที่เขียนมาข้างต้นคงยังคง คลุมเครือสำหรับคุณอยู่มาก นั่นไม่น่าแปลกใจ เพราะ กลุ่มจับเป็นส่วนที่เข้าใจได้ยากที่สุด ของ Regular Expression มาลองทำความเข้าใจจากตัวอย่างกัน
ตัวอย่าง
สมมติว่าเรามีสตริงดังนี้:
let str = 'aa bb cd ef';
ลองหาในสตริงนี้ทุกตำแหน่งที่มี ตัวอักษรสองตัวใดๆ ที่เหมือนกันเรียงกัน สำหรับการแก้ปัญหา เราจะค้นหาตัวอักษรใดๆ เก็บมันไว้ในกลุ่มจับ แล้วตรวจสอบว่าตัวอักษร ถัดไปเป็นเนื้อหาของกลุ่มจับนี้หรือไม่:
let res = str.replace(/([a-z])\1/g, '!');
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! cd ef'
ตัวอย่าง
สมมติว่าเรามีสตริงดังนี้:
let str = 'asxca buzxb csgd';
ลองหาคำทั้งหมดในสตริงนี้ ที่มี ตัวอักษรตัวแรกและตัวสุดท้ายเหมือนกัน สำหรับการแก้ปัญหา เราจะเขียนรูปแบบดังนี้: ตัวอักษร ตามด้วยตัวอักษรอีกหนึ่งตัวหรือมากกว่า แล้วตามด้วย ตัวอักษรที่เหมือนกับตัวแรก:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! csgd'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
let str = 'aaa bbb ccc xyz';
จงหาสตริงย่อยทั้งหมดที่มี ตัวอักษรเหมือนกันสามตัวเรียงกัน
กำหนดสตริง:
let str = 'a aa aaa aaaa aaaaa';
จงหาสตริงย่อยทั้งหมดที่มี ตัวอักษรเหมือนกันสองตัวหรือมากกว่าขึ้นไปเรียงกัน
กำหนดสตริง:
let str = 'aaa aaa bbb bbb ccc ddd';
จงหาสตริงย่อยทั้งหมดที่มี คำที่เหมือนกันสองคำเรียงกัน