⊗jsSpREESCh 99 of 294 menu

การป้องกันอักขระพิเศษใน Regular Expressions ของ JavaScript

สมมติว่าเราต้องการให้อักขระพิเศษแทนตัวมันเอง วิธีการคือต้องป้องกันมันด้วยเครื่องหมายแบ็กสแลช ลองดูตัวอย่างกัน

ตัวอย่าง

ในตัวอย่างถัดไป ผู้เขียน Regular Expression ต้องการให้รูปแบบการค้นหาเป็นดังนี้: ตัวอักษร 'a', ตามด้วยเครื่องหมายบวก '+', ตามด้วยตัวอักษร 'x' อย่างไรก็ตาม ผู้เขียนโค้ด ไม่ได้ป้องกันอักขระ '+' ดังนั้นรูปแบบการค้นหาจริงๆ จึงเป็นดังนี้: ตัวอักษร 'a' หนึ่งครั้งหรือมากกว่า, ตามด้วยตัวอักษร 'x':

let str = 'a+x ax aax aaax'; let res = str.replace(/a+x/g, '!');

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

'a+x ! ! !'

ตัวอย่าง

และตอนนี้ผู้เขียนได้ป้องกันเครื่องหมายบวกด้วยแบ็กสแลชแล้ว ตอนนี้รูปแบบการค้นหาก็เป็นดังที่ต้องการ: ตัวอักษร 'a', ตามด้วยเครื่องหมายบวก '+', ตามด้วยตัวอักษร 'x'

let str = 'a+x ax aax aaax'; let res = str.replace(/a\+x/g, '!');

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

'! ax aax aaax'

ตัวอย่าง

ในตัวอย่างนี้ รูปแบบจะเป็นดังนี้: ตัวอักษร 'a', ตามด้วยจุด '.', ตามด้วยตัวอักษร 'x':

let str = 'a.x abx azx'; let res = str.replace(/a\.x/g, '!');

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

'! abx azx'

ตัวอย่าง

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

let str = 'a.x abx azx'; let res = str.replace(/a.x/g, '!');

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

'! ! !'

หมายเหตุ

โปรดสังเกตว่าถ้าคุณลืมแบ็กสแลชสำหรับจุด (เมื่อมันควรจะหมายถึงตัวมันเอง) - คุณอาจจะไม่สังเกตเห็นความผิดพลาดนี้:

'a.x'.replace(/a.x/g, '!'); // ส่งคืน '!' ตามที่เราต้องการ

จากภายนอก ดูเหมือนจะทำงานถูกต้อง (เนื่องจากจุดหมายถึงอักขระใดๆ ก็ได้ รวมถึงจุดธรรมดา '.' ด้วย) แต่ถ้าเราเปลี่ยนสตริง ที่กำลังถูกแทนที่ - เราจะเห็นข้อผิดพลาดของเรา:

'a.x abx azx'.replace(/a.x/g, '!'); // ส่งคืน '! ! !' แต่คาดหวัง '! abx azx'

รายการอักขระพิเศษและอักขระธรรมดา

หากคุณป้องกันอักขระธรรมดา - ไม่มีอะไรเลวร้ายเกิดขึ้น - มันจะยังคงหมายถึงตัวมันเอง ข้อยกเว้นคือตัวเลข คุณไม่สามารถป้องกันพวกมันได้

มักจะมีข้อสงสัยว่าอักขระนี้เป็นอักขระพิเศษหรือไม่ บางคนถึงขั้นป้องกันอักขระที่น่าสงสัยทั้งหมดในทันที อย่างไรก็ตาม นี่เป็นวิธีปฏิบัติที่ไม่ดี (ทำให้ Regular Expression รกไปด้วยแบ็กสแลช)

อักขระต่อไปนี้เป็นอักขระพิเศษ: $ ^ . * + ? \ / {} [] () |

อักขระต่อไปนี้ไม่ใช่อักขระพิเศษ: @ : , ' " ; - _ = < > % # ~ `& !

ปัญหาเชิงปฏิบัติ

กำหนดสตริง:

let str = 'a.a aba aea';

เขียน Regular Expression ที่จะค้นหาสตริง 'a.a' โดยไม่ครอบคลุมสตริงอื่นๆ

กำหนดสตริง:

let str = '2+3 223 2223';

เขียน Regular Expression ที่จะค้นหาสตริง '2+3' โดยไม่ครอบคลุมสตริงอื่นๆ

กำหนดสตริง:

let str = '23 2+3 2++3 2+++3 345 567';

เขียน Regular Expression ที่จะค้นหาสตริง '2+3', '2++3', '2+++3', โดยไม่ครอบคลุมสตริงอื่นๆ (+ อาจจะมีได้หลายตัว)

กำหนดสตริง:

let str = '23 2+3 2++3 2+++3 445 677';

เขียน Regular Expression ที่จะค้นหาสตริง '23', '2+3', '2++3', '2+++3' โดยไม่ครอบคลุมสตริงอื่นๆ

กำหนดสตริง:

let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

เขียน Regular Expression ที่จะค้นหาสตริง '*q+', '*qq+', '*qqq+', โดยไม่ครอบคลุมสตริงอื่นๆ

กำหนดสตริง:

let str = '[abc] {abc} abc (abc) [abc]';

เขียน Regular Expression ที่จะค้นหาสตริง ที่อยู่ในวงเล็บเหลี่ยมและแทนที่มันด้วย '!'

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ