ยัติภังค์ภายในเซ็ตใน Regular Expression ของ JavaScript
ยัติภังค์ - ก็เป็นตัวอักษรพิเศษภายใน [ ]
(แต่ถ้าอยู่นอก - ไม่ใช่) หากคุณต้องการยัติภังค์เองเป็นตัวอักษร - ให้วางมันไว้ตำแหน่งที่
มัน จะไม่ถูกตีความว่าเป็นตัวแบ่งกลุ่ม
ทำไมนี่สำคัญ: คุณอาจสร้างกลุ่มตัวอักษรขึ้นมาโดยไม่รู้ตัว
ตัวอย่างเช่น แบบนี้ - '[:-@]' - คุณคิดว่า
เลือกเครื่องหมายโคลอน ยัติภังค์ และเครื่องหมาย @ แต่ใน
ความเป็นจริงแล้ว กลับกลายเป็นกลุ่มตัวอักษรระหว่าง
: และ @ กลุ่มนี้ประกอบด้วย
ตัวอักษรต่อไปนี้: ? < = > : ;
พวกมันมาจากไหน? จากตาราง ASCII - เครื่องหมายโคลอนมีหมายเลขน้อยกว่าเครื่องหมาย @ - จึงกลายเป็นกลุ่ม นั่นคือทุกกลุ่ม เกิดขึ้นตามตาราง ASCII (หากต้องการ ก็สามารถใช้ประโยชน์จากเรื่องนี้ได้)
วิธีจัดการกับเรื่องนี้: วางตัวอักษรยัติภังค์
ในตำแหน่งที่แน่ใจว่าจะไม่ถูกตีความเป็น
ตัวอักษรกลุ่ม เช่น ที่จุดเริ่มต้นหรือจุดสิ้นสุด
(นั่นคือหลัง [หรือก่อน ])
คุณยังสามารถ escape ยัติภังค์ได้ - แล้ว
มันก็จะหมายถึงตัวมันเองโดยไม่ขึ้นกับ
ตำแหน่ง ตัวอย่างเช่น แทนที่จะเขียน [:-@] ก็ให้เขียน
[:\-@] - และจะไม่มีกลุ่มอีกต่อไป แต่
จะมีสามตัวอักษร - เครื่องหมายโคลอน ยัติภังค์ และเครื่องหมาย @
@
ตัวอย่าง
ในตัวอย่างถัดไป แพทเทิร์นการค้นหาคือ:
เลข 1 ตามด้วยตัวอักษรตั้งแต่ 'a'
ถึง 'z' ตามด้วยเลข 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
ผลลัพธ์ที่เก็บในตัวแปรจะเป็นดังนี้:
'! 1-2 ! !'
ตัวอย่าง
ตอนนี้เรามา escape ยัติภังค์กัน ผลลัพธ์
แพทเทิร์นการค้นหาคือ: เลข 1 ตามด้วย
ตัวอักษร 'a' หรือยัติภังค์ หรือตัวอักษร 'z'
ตามด้วยเลข 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
ผลลัพธ์ที่เก็บในตัวแปรจะเป็นดังนี้:
'! ! 1c2 !'
ตัวอย่าง
คุณสามารถย้ายตำแหน่งยัติภังค์ได้เลยโดยไม่ต้อง escape:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
ผลลัพธ์ที่เก็บในตัวแปรจะเป็นดังนี้:
'! ! 1c2 !'
ตัวอย่าง
ในตัวอย่างถัดไป แพทเทิร์นการค้นหาคือ:
ตัวอักษรแรก - คือตัวอักษรพิมพ์เล็กหรือ
ยัติภังค์ '-' ตามด้วยตัวอักษร 'x' สองตัว:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
ผลลัพธ์ที่เก็บในตัวแปรจะเป็นดังนี้:
'! Axx ! @xx'
ตัวอย่าง
ในตัวอย่างถัดไป แพทเทิร์นการค้นหาคือ:
ตัวอักษรแรก - คือตัวอักษรพิมพ์เล็ก พิมพ์ใหญ่
หรือยัติภังค์ '-' ตามด้วยตัวอักษร 'x' สองตัว:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
ผลลัพธ์ที่เก็บในตัวแปรจะเป็นดังนี้:
'! ! ! @xx'
ตัวอย่าง
คุณสามารถวางยัติภังค์ระหว่างสองกลุ่ม - ที่นั่นมันแน่นอนว่าจะไม่สร้างกลุ่มเพิ่มขึ้นมาอีก:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
ผลลัพธ์ที่เก็บในตัวแปรจะเป็นดังนี้:
'! ! ! @xx'
ปัญหาประยุกต์
กำหนดสตริง:
let str = 'xaz xBz xcz x-z x@z';
ค้นหาทุกสตริงตามแพทเทิร์นต่อไปนี้:
ตัวอักษร 'x' ตามด้วยตัวอักษรพิมพ์ใหญ่หรือพิมพ์เล็ก
หรือยัติภังค์ ตามด้วยตัวอักษร 'z'
กำหนดสตริง:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
ค้นหาทุกสตริงตามแพทเทิร์นต่อไปนี้:
ตัวอักษร 'x' ตามด้วยเครื่องหมายดอลลาร์ หรือ
ยัติภังค์ หรือเครื่องหมายบวก ตามด้วยตัวอักษร 'z'