เข้าใจการแสดงออกปกติของ JS อย่างลึกซึ้ง --- การจัดกลุ่ม
ฉันเขียนบทความเกี่ยวกับการเริ่มต้นด้วยการแสดงออกปกติมาก่อน ฉันคิดว่าฉันค่อนข้างคุ้นเคยกับการแสดงออกปกติ แต่วันนี้ฉันพบกับข้อผิดพลาดอีกครั้ง อาจเป็นเพราะฉันไม่ระวังพอ วันนี้ฉันจะมุ่งเน้นไปที่การแบ่งปันการจัดกลุ่มในการแสดงออกปกติของ JavaScript หากคุณไม่เข้าใจการแสดงออกปกติของ JS เพียงพอคุณสามารถคลิกที่นี่เพื่อเรียนรู้เพิ่มเติม
การจัดกลุ่มค่อนข้างใช้กันอย่างแพร่หลายอย่างสม่ำเสมอ การจัดกลุ่มที่ฉันเข้าใจคือวงเล็บคู่หนึ่ง () วงเล็บแต่ละคู่แสดงกลุ่มและกลุ่มสามารถแบ่งออกเป็น:
•การจัดกลุ่มจับ
•การจัดกลุ่มที่ไม่ได้จับ
การจับกลุ่ม
การจัดกลุ่มการจับภาพจะได้รับผลลัพธ์ของการจัดกลุ่มที่สอดคล้องกันในรูปแบบของเทอมที่สองและเทอมที่สามในฟังก์ชันเช่นการจับคู่ มาดูตัวอย่างก่อน
var reg =/test (/d+)/; var str = 'ใหม่ test001 test002'; console.log (str.match (reg)); // ["test001", "001", ดัชนี: 4, อินพุต: "test001 ใหม่ test002"]
ในรหัส (/d+) เป็นกลุ่ม (บางคนก็เรียกมันว่ารูปแบบย่อย) แต่พวกเขาทั้งหมดแสดงถึงความหมายเดียวกัน ในตัวอย่างด้านบน Test001 เป็นผลมาจากการจับคู่ที่แน่นอน อย่างไรก็ตามการจับคู่ของกลุ่มคือการค้นหาอักขระที่ตรงกับรูปแบบย่อย/d+ จากผลลัพธ์การจับคู่ที่แน่นอนทั้งหมด (นั่นคือ test001) เห็นได้ชัดว่า 001 แต่สถานการณ์ที่พบในวันนี้เป็นเช่นนี้
var reg =/test (/d)+/; var str = 'ใหม่ test001 test002'; console.log (str.match (reg)); // ["test001", "1", ดัชนี: 4, อินพุต: "ใหม่ test001 test002"]
ความแตกต่างคือ (/d+) เปลี่ยนเป็น (/d)+และผลลัพธ์การจับคู่ทั้งหมดยังคงเป็น Test001 แต่ผลลัพธ์ของการจับคู่กลุ่มแรกนั้นแตกต่างกัน มาดูความแตกต่างกัน
(/d+) นี่เป็นสถานการณ์การจัดกลุ่ม ตั้งแต่ค่าเริ่มต้นรูปแบบการจับคู่เป็นรูปแบบโลภนั่นคือมากที่สุดเท่าที่จะเป็นไปได้ทั้งหมด /d+ ผลลัพธ์ของการจับคู่คือ 001 และจากนั้นมีการเพิ่มวงเล็บคู่หนึ่งออกไปข้างนอกซึ่งหมายถึงการจัดกลุ่มดังนั้นผลลัพธ์ของการแข่งขันในกลุ่มแรกคือ 001 ลองดูที่ ( /d)+ ในตัวอย่างที่สอง นี่เป็นรูปแบบโลภ ก่อนอื่นมันจะจับคู่ 0 และ 0 จากนั้นจับคู่กับจุดสิ้นสุดของ 1 นอกจากนี้ยังตรงกับจุดสิ้นสุดของการแข่งขันครั้งนี้ ดูเหมือนว่าไม่มีความแตกต่างระหว่างการแข่งขันในตัวอย่างแรก แต่การจัดกลุ่ม (/d) ที่นี่หมายถึงการจับคู่หมายเลขเดียว ตามความเข้าใจก่อนหน้านี้ของฉันมันเป็น 0 แต่ความเข้าใจนี้ผิด เนื่องจากการแข่งขันทั้งหมดเป็นรูปแบบโลภการจับคู่ให้มากที่สุด (/d) ในกลุ่มจะจับผลลัพธ์ที่ 1 ของการแข่งขันสุดท้าย ถ้ามันเป็นรูปแบบที่ไม่ได้กำหนดมันจะจับคู่น้อยที่สุดเท่าที่จะทำได้
var reg =/test (/d)+?/; var str = 'ใหม่ test001 test002'; console.log (str.match (reg)); // ["test001", "0", ดัชนี: 4, อินพุต: "ใหม่ test001 test002"]
ด้วยวิธีนี้ผลการจับคู่ (/d) คือ 0 แม้ว่าจะมีผลลัพธ์ที่สามารถจับคู่ได้ในภายหลังนี่คือการจับคู่ให้น้อยที่สุดเท่าที่จะทำได้
การจัดกลุ่มที่ไม่ได้จับ
การจัดกลุ่มที่ไม่ได้รับการจับกุมหมายความว่าจำเป็นต้องใช้วงเล็บในบางสถานที่ แต่พวกเขาไม่ต้องการให้เป็นกลุ่มจับภาพนั่นคือพวกเขาไม่ต้องการให้กลุ่มนี้ถูกเรียกคืนโดยฟังก์ชั่นเช่น Macth Exec โดยปกติแล้วพวกเขาจะถูกนำหน้าด้วยวงเล็บ (?: รูปแบบ) เพื่อให้มันกลายเป็นกลุ่มที่ไม่ได้จับ
var reg =/test (?:/d)+/; var str = 'ใหม่ test001 test002'; console.log (str.match (reg)); // ["test001", ดัชนี: 4, อินพุต: "ใหม่ test001 test002"
ด้วยวิธีนี้จะไม่มีการจับคู่เนื้อหาในผลการแข่งขันของการแข่งขันซึ่งหมายความว่ารายการที่สองหายไป
บทความนี้มุ่งเน้นไปที่การอธิบายความแตกต่างระหว่าง (/d+) และ (/d)+ซึ่งเป็นหลุมที่ฉันได้ก้าวไปในวันนี้ หากมีข้อผิดพลาดใด ๆ โปรดแก้ไขให้ถูกต้อง
บทความข้างต้นมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับการแสดงออกปกติของ JS-การจัดกลุ่มเป็นเนื้อหาทั้งหมดที่ฉันได้แบ่งปันกับคุณ ฉันหวังว่ามันจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น