ความหมายและการใช้ออบเจ็กต์ RegExp:
ตรวจสอบการจับคู่สตริง รับส่วนหนึ่งของเนื้อหาในสตริง และสร้างสตริงใหม่โดยยึดตามสตริงต้นฉบับ (รวมถึงการบวก การลบ และการแก้ไข)
มีสองวิธีหลักในการสร้างวัตถุ RegExp:
ใช้ตัวอักษร เช่น /w/g
ใช้ตัวสร้าง เช่น new RegExp(/w/)
มีหลายประเด็นที่ควรทราบเมื่อสร้างวัตถุ RegExp:
มักใช้ตัวอักษรเพื่อสร้างวัตถุ RegExp แบบคงที่ที่ไม่ได้สร้างขึ้นโดยรันไทม์
สามารถเพิ่มแฟล็กได้โดยตรงหลังตัวอักษรเพื่อจำกัดผลการดำเนินการของสตริงที่ตรงกัน แฟล็กที่ใช้กันทั่วไป ได้แก่ g และ i ซึ่งใช้เพื่อแสดงการจับคู่ส่วนกลาง (ทั่วโลก) และการจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ตามลำดับ
พารามิเตอร์แรกของตัวสร้าง RegExp จะมีรูปแบบของออบเจ็กต์ ถ้ารูปแบบเป็นตัวอักษร RegExp จะไม่สามารถระบุพารามิเตอร์ตัวที่สอง (นั่นคือ การระบุแฟล็ก) ได้ หากรูปแบบเป็นสตริง คุณสามารถใช้พารามิเตอร์ตัวที่สองได้
ตัวสร้าง RegExp มักใช้เพื่อสร้างวัตถุ RegExp แบบไดนามิกที่สร้างโดยรันไทม์
เมื่อรูปแบบของ RegExp เป็นสตริง "" ทั้งหมดในตัวอักษรจะต้องเขียนเป็น "\" เนื่องจาก "" จำเป็นต้องหลีกเป็นสตริง สองวิธีข้างต้นจะสร้างวัตถุจาวาสคริปต์ ดังนั้น /w/ == /w/Return false
ฟังก์ชันที่เกี่ยวข้องกับวัตถุ RegExp:
หากต้องการตรวจสอบการจับคู่ของสตริง คุณสามารถใช้เมธอด regExp.test(string) ซึ่งจะตรวจสอบว่าสตริงตรงกับรูปแบบที่ regExp ให้ไว้หรือไม่ คุณยังสามารถใช้เมธอด string.search(regExp) ซึ่งจะคืนค่า -1 หากทั้งสองไม่ตรงกัน
หากต้องการรับส่วนหนึ่งของสตริง คุณสามารถใช้เมธอด regExp.exec(string) หรือคุณสามารถใช้เมธอด string.match(regExp) หากต้องการสร้างสตริงใหม่บนสตริงต้นฉบับ โดยปกติจะใช้ string.replace(searchValue, แทนที่ค่า) วิธีการ
ความหมายของรูปแบบมีอยู่ในออบเจ็กต์ RegExp:
RegExp สามารถกำหนดทางเลือกได้หลายรายการโดยคั่นด้วย "|" การดำเนินการนี้มีลำดับความสำคัญต่ำสุด ดังนั้นหากมี "|" อยู่ อันดับแรกจะแบ่ง RegExp ออกเป็นหลายส่วน ประกอบด้วยคำศัพท์ คำศัพท์แบ่งออกเป็น การยืนยัน (ใช้สำหรับคุณสมบัติตำแหน่ง) อะตอม (หน่วยจับคู่) และอะตอมที่มีปริมาณ (ตัวแก้ไข)
การยืนยันจะถูกแบ่งออกเป็น "^" ซึ่งใช้เพื่อจับคู่จุดเริ่มต้นของสตริง ใน multiInput (นั่นคือ เมื่อแฟล็กมี m) ก็สามารถจับคู่จุดเริ่มต้นของบรรทัดได้ด้วย จุดสิ้นสุดของสตริง ใน multiInput (นั่นคือ เมื่อแฟล็กมี m) นอกจากนี้ยังสามารถจับคู่จุดสิ้นสุดของบรรทัดได้ด้วย "b" เพื่อจับคู่ช่วงเวลา w และ W เนื้อหาใดๆ ในสตริง แต่ใช้เพื่อกำหนดการจับคู่ตำแหน่งเท่านั้น
สถานการณ์ของอะตอมนั้นซับซ้อนกว่านั้นก่อนอื่น มาดู Quantifier ของอะตอมกันก่อน ซึ่งอาจรวมถึง * + ? {n} {m,} {m,n} โดยที่ * หมายความว่าอะตอมสามารถมีการซ้ำซ้อนได้ 0 ครั้งขึ้นไป + หมายถึง 1 หรือมากกว่า สำหรับการทำซ้ำข้างต้น ? หมายถึง 0 หรือ 1 ครั้ง {n} หมายถึงการทำซ้ำ n อย่างแน่นอน {m,} หมายถึง m หรือมากกว่าการทำซ้ำ {m,n} หมายถึงจำนวนการทำซ้ำอยู่ระหว่าง m และ n (รวมถึง m และ n ) Quantifier ข้างต้นสามารถตามด้วย ? เพื่อเริ่มโหมดที่ไม่โลภ ฉันจะอธิบายความหมายของโหมดนี้ในภายหลัง
Atom มี patternCharacter (อักขระธรรมดา นั่นคือ อักขระที่ไม่มีความหมายพิเศษในรูปแบบ ซึ่งจะจับคู่ตามตัวอักษร)
"." จับคู่อักขระที่ไม่ใช่ตัวสิ้นสุดบรรทัดทั้งหมด
AtomEscape มีตัวเลข 1 (ใช้เพื่ออ้างถึงการจับคู่ที่สำเร็จในวงเล็บก่อนหน้า) การอ้างอิงถึงอักขระบางตัว n f r t v xNN uXXXX cX ฯลฯ อักขระบางตัวที่มีความหมายพิเศษ เช่น d D s S w W
CharacterClass มีสองรูปแบบ: [...] และ [^...] สามารถประกอบด้วยอักขระได้หลายตัว เช่น -, n และการอ้างอิงอักขระอื่นๆ, b, d และอักขระความหมายพิเศษอื่นๆ โปรดทราบว่าหากมีอักขระรอบๆ "-" ความหมายจะเปลี่ยนจากอักขระบางตัวไปเป็นอักขระตัวใดตัวหนึ่ง หากไม่มีอักขระทางด้านซ้ายหรือขวาของ "-" ดังนั้น "-" จะแสดงเฉพาะอักขระขีดกลางเท่านั้น
(กลุ่ม) หากคุณทำการจัดกลุ่มในโหมดด้านบน คุณสามารถใช้ Quantifier เพื่อแก้ไขหลังจากกลุ่มได้
(?:group) ใช้เป็นกลุ่มเท่านั้น และเนื้อหาที่ตรงกับกลุ่มจะไม่ถูกบันทึกและจะไม่รวมอยู่ใน 1..n
(?=group) จำเป็นต้องมีการจับคู่แต่ไม่รวมเนื้อหาการจับคู่กลุ่มในสตริงการจับคู่ที่ส่งคืน
(?!group) ไม่จำเป็นต้องจับคู่และจะไม่รวมเนื้อหาการจับคู่กลุ่มในสตริงการจับคู่ที่ส่งคืน ตอนนี้ฉันต้องการพูดคุยเกี่ยวกับโหมดการทำงานที่สำคัญอีกสองโหมดของ RegExp:
Matching Alternative จะอยู่จากซ้ายไปขวาเสมอ การจับคู่ครั้งแรกจะไม่ลองการจับคู่ครั้งต่อไปอีกต่อไป เช่น
/ab|abc/.exec("abc") สตริงด้านบน "abc" จะจับคู่กับ ab ในรูปแบบเท่านั้น และจะไม่จับคู่ abc
ซึ่งเป็นเรื่องปกติเสมอไป หากไม่ได้เพิ่ม ? หลังจาก Quantifier โหมด greedy จะถูกนำมาใช้ หลังจากเพิ่ม ? แล้ว โหมดที่ไม่โลภจะถูกนำมาใช้ ตัวอย่างเช่น เมื่อ
จับคู่ /w+bc/.exec("abcbcbc") จับคู่การจับคู่ให้ได้มากที่สุดก่อนเสมอ (เช่น greedy mode ) ดังนั้นมันจะจับคู่ "abcbcbc" หากเปลี่ยนเป็น
/w+?bc/.exec("abcbcbc") มันจะจับคู่ให้น้อยที่สุด ( นั่นคือโหมดไม่โลภ) ดังนั้นจะจับคู่เฉพาะ "abc" เท่านั้น
สำหรับข้อกำหนดการแยกวิเคราะห์สตริงโดยทั่วไป คุณสามารถใช้ exec หรือวิธีการจับคู่เพื่อแยกวิเคราะห์ได้ หากสตริงมีขนาดใหญ่ คุณมักจะต้องใช้โครงสร้างแบบวนซ้ำสำหรับการแยกวิเคราะห์ RegExp จะมีประสิทธิภาพมากเมื่อรวมกับคำสั่ง while และคำสั่งอื่นๆ
เมื่อคุณต้องการแปลงสตริงที่มีอยู่เป็นสตริงอื่นโดยการแก้ไข โดยทั่วไปคุณจะใช้วิธีการแทนที่วิธีนี้เป็นวิธีที่สำคัญที่สุดใน RegExp ในความคิดของฉัน ความต้องการแก้ไขสตริง