⊗jsSpREGL 101 of 294 menu

การจำกัดความละโมบใน Regular Expressions ใน JavaScript

Regular Expressions โดยค่าเริ่มต้นนั้น ละโมบ นั่นหมายความว่าพวกมันจะจับตัวอักษรให้ได้มากที่สุด เท่าที่เป็นไปได้ ลองมาดูตัวอย่างกัน สมมติว่าเรามีสตริงแบบนี้:

let str = 'aeeex zzz x kkk';

สมมติว่าในสตริงนี้เราต้องการหาสับสตริง 'aeeex' โดยใช้แพตเทิร์นต่อไปนี้: ตัวอักษร 'a' ตามด้วยอักขระใดๆหนึ่งตัวหรือมากกว่า จากนั้นตามด้วยตัวอักษร 'x'

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

เราคาดหวังว่าผลลัพธ์ในตัวแปรนั้น จะเป็นสตริง '! zzz x kkk' อย่างไรก็ตาม มันไม่เป็นเช่นนั้น - ค่าที่ได้ในตัวแปรคือสตริง '! kkk'

ทั้งหมดเป็นเพราะว่า regex ของเราค้นหาทุก ตัวอักษรจากตัวอักษร 'a' ไปถึงตัวอักษร 'x' แต่ในสตริงของเรามีตัวอักษร 'x' อยู่สองตัว! เนื่องจาก ความละโมบ ทำให้ regex ค้นหาไปจนถึง ตัว x ตัวสุดท้าย ทำให้จับส่วนที่ ไม่ตรงกับที่เราคาดหวังไว้

แน่นอนว่า พฤติกรรมเช่นนี้มักเป็นสิ่งที่เราต้องการ แต่ในกรณีนี้โดยเฉพาะ เราอยากยกเลิกความละโมบ และบอก regex ให้ค้นหาไปจนถึงตัว x ตัวแรกเท่านั้น

เพื่อจำกัดความละโมบ ต้องเติมเครื่องหมายคำถาม หลังโอเปอเรเตอร์การทำซ้ำ:

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

สามารถจำกัดความละโมบได้กับโอเปอเรเตอร์การทำซ้ำทุกตัว ทั้ง *, ?, และ {} - แบบนี้: *?, ?? และ {}?

กำหนดสตริง:

let str = 'aba accca azzza wwwwa';

เขียน Regular Expression ที่จะหาสตริงทั้งหมด ที่เริ่มต้นและลงท้ายด้วยตัวอักษร 'a' และแทนที่แต่ละสตริงนั้นด้วย '!' ระหว่าง ตัวอักษร 'a' สามารถมีอักขระใดๆก็ได้ (ยกเว้น 'a')

ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ