กลุ่มจับในตัว Regular Expression เองใน JavaScript

เนื้อหาของกลุ่มจับสามารถใช้งานได้ไม่เพียงแต่ใน สตริงสำหรับการแทนที่ แต่ยังสามารถใช้ในตัว Regular Expression เองได้: เรา สามารถเก็บบางสิ่งไว้ในกลุ่มจับ แล้วหลังจากนั้น ภายใน Regular Expression นั้นสามารถระบุได้ว่า ตรงนี้ควรมี เนื้อหาของกลุ่มจับนั้น

เนื้อหาของกลุ่มจับสามารถอ้างอิงได้โดยใช้หมายเลขของกลุ่มจับ โดยมีเครื่องหมายแบ็กสแลชนำหน้า ตัวอย่างเช่น กลุ่มจับแรกจะสามารถอ้างอิงได้ดังนี้: \1 กลุ่มจับที่สองดังนี้ - \2 กลุ่มที่สาม - \3 และต่อๆ ไป

ฉันมั่นใจว่าทุกสิ่งที่เขียนมาข้างต้นคงยังคง คลุมเครือสำหรับคุณอยู่มาก นั่นไม่น่าแปลกใจ เพราะ กลุ่มจับเป็นส่วนที่เข้าใจได้ยากที่สุด ของ Regular Expression มาลองทำความเข้าใจจากตัวอย่างกัน

ตัวอย่าง

สมมติว่าเรามีสตริงดังนี้:

javascriptlet str = 'aa bb cd ef';

ลองหาในสตริงนี้ทุกตำแหน่งที่มี ตัวอักษรสองตัวใดๆ ที่เหมือนกันเรียงกัน สำหรับการแก้ปัญหา เราจะค้นหาตัวอักษรใดๆ เก็บมันไว้ในกลุ่มจับ แล้วตรวจสอบว่าตัวอักษร ถัดไปเป็นเนื้อหาของกลุ่มจับนี้หรือไม่:

javascriptlet res = str.replace(/([a-z])\1/g, '!');

ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:

javascript'! ! cd ef'

ตัวอย่าง

สมมติว่าเรามีสตริงดังนี้:

javascriptlet str = 'asxca buzxb csgd';

ลองหาคำทั้งหมดในสตริงนี้ ที่มี ตัวอักษรตัวแรกและตัวสุดท้ายเหมือนกัน สำหรับการแก้ปัญหา เราจะเขียนรูปแบบดังนี้: ตัวอักษร ตามด้วยตัวอักษรอีกหนึ่งตัวหรือมากกว่า แล้วตามด้วย ตัวอักษรที่เหมือนกับตัวแรก:

javascriptlet res = str.replace(/([a-z])[a-z]+\1/g, '!');

ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:

javascript'! ! csgd'

โจทย์ฝึกปฏิบัติ

Задание 1

กำหนดสตริง:

javascriptlet str = 'aaa bbb ccc xyz';

จงหาสตริงย่อยทั้งหมดที่มี ตัวอักษรเหมือนกันสามตัวเรียงกัน

Задание 2

กำหนดสตริง:

javascriptlet str = 'a aa aaa aaaa aaaaa';

จงหาสตริงย่อยทั้งหมดที่มี ตัวอักษรเหมือนกันสองตัวหรือมากกว่าขึ้นไปเรียงกัน

Задание 3

กำหนดสตริง:

javascriptlet str = 'aaa aaa bbb bbb ccc ddd';

จงหาสตริงย่อยทั้งหมดที่มี คำที่เหมือนกันสองคำเรียงกัน