มีสองวิธีในการกำหนดนิพจน์ทั่วไปใน JavaScript
1. Regexp Constructor
รูปแบบ var = ใหม่ regexp ("[bc] ที่", "i");
มันได้รับสองพารามิเตอร์: หนึ่งคือรูปแบบสตริงที่จะจับคู่และอื่น ๆ เป็นสตริง Flag เสริม
2. ตัวอักษร
รูปแบบ var = /[bc] at /i;
รูปแบบการจับคู่ของนิพจน์ทั่วไปรองรับสามสายธง:
G: โหมดการค้นหาทั่วโลกทั่วโลกซึ่งจะนำไปใช้กับสตริงทั้งหมดแทนที่จะหยุดการค้นหาเมื่อค้นหาการแข่งขันครั้งแรก
I: กรณี Ingore, ละเว้นกรณีตัวอักษรนั่นคือละเว้นรูปแบบและกรณีสตริงเมื่อพิจารณาการจับคู่;
M: หลายบรรทัดรูปแบบ multiline นั่นคือเมื่อการค้นหาถึงจุดสิ้นสุดของบรรทัดข้อความมันจะยังคงมองหาว่ามีการจับคู่ในบรรทัดถัดไปหรือไม่
ความแตกต่างระหว่างสองวิธีในการสร้างนิพจน์ทั่วไปคือตัวอักษรนิพจน์ทั่วไปแบ่งปันอินสแตนซ์ regexp เดียวกันเสมอและอินสแตนซ์ใหม่ของ Regexp แต่ละตัวที่สร้างขึ้นโดยใช้ตัวสร้างเป็นอินสแตนซ์ใหม่
เมตา
Metacharacters เป็นตัวละครที่มีความหมายพิเศษ metacharacters หลักของการแสดงออกปกติคือ:
- -
Metachars มีความหมายที่แตกต่างกันในชุดค่าผสมที่แตกต่างกัน
อักขระพิเศษที่กำหนดไว้ล่วงหน้า
คลาสอักขระคลาสง่ายคลาส
โดยทั่วไปนิพจน์ทั่วไปมีอักขระที่สอดคล้องกับอักขระในสตริง แต่เราสามารถใช้ [] เพื่อสร้างคลาสง่าย ๆ เพื่อแสดงคลาสของอักขระที่ตรงกับคุณสมบัติบางอย่าง ตัวอย่างเช่น:
[ABC] สามารถจับคู่อักขระในวงเล็บ A, B, C หรือชุดค่าผสมใด ๆ
ชั้นเรียนย้อนกลับ
เนื่องจาก [] สามารถสร้างชั้นเรียนได้คุณจะนึกถึงคลาสที่เกี่ยวข้องที่ไม่มีเนื้อหาในวงเล็บ คลาสนี้เรียกว่าคลาสย้อนกลับ ตัวอย่างเช่น [^abc] สามารถจับคู่อักขระที่ไม่ใช่ A หรือ B หรือ C
หมวดหมู่ขอบเขต
บางครั้งมันก็ลำบากเกินไปที่จะจับคู่อักขระทีละตัวและประเภทของการจับคู่ก็เหมือนกัน ในเวลานี้เราสามารถใช้บรรทัดการเชื่อมต่อ "-" เพื่อแสดงเนื้อหาระหว่างช่วงเวลาที่ปิด ตัวอย่างเช่นการจับคู่ตัวอักษรตัวพิมพ์เล็กทั้งหมดสามารถใช้ [AZ] ดังนี้:
การจับคู่ทั้งหมด 0 ถึง 9 สามารถแสดงได้โดยใช้ [0-9]:
ชั้นเรียนที่กำหนดไว้ล่วงหน้า
สำหรับหลายคลาสที่เราสร้างขึ้นข้างต้นนิพจน์ทั่วไปจะช่วยให้เรามีคลาสที่กำหนดไว้ล่วงหน้าหลายคลาสเพื่อให้ตรงกับอักขระทั่วไปดังต่อไปนี้:
| อักขระ | หมวดหมู่ที่เทียบเท่า | ความหมาย |
| - | [^/n/r] | จับคู่อักขระทั้งหมดยกเว้นการคืนรถและการแบ่งสาย |
| /d | [0-9] | อักขระหมายเลข |
| /d | [^0-9] | อักขระที่ไม่ใช่ตัวเลข |
| /s | [/t/n/x0b/f/r] | อักขระช่องว่าง |
| /s | [^/t/n/x0b/f/r] | อักขระที่ไม่ใช่ไวท์สเปซ |
| /w | [A-ZA-Z_0-9] | อักขระคำ (ตัวอักษรตัวเลขและขีดเส้นใต้) |
| /w | [^a-za-z_0-9] | อักขระที่ไม่ใช่คำ |
เครื่องวัดปริมาณ
วิธีการข้างต้นจับคู่อักขระเป็นแบบหนึ่งต่อหนึ่ง หากตัวละครปรากฏขึ้นหลายครั้งอย่างต่อเนื่องมันจะลำบากมากที่จะจับคู่ตามวิธีการข้างต้น ดังนั้นเราสงสัยว่ามีวิธีอื่นที่สามารถจับคู่อักขระที่ปรากฏซ้ำ ๆ ได้โดยตรงหรือไม่ การแสดงออกปกติช่วยให้เรามีปริมาณบางอย่างดังนี้:
| อักขระ | ความหมาย |
| - | ศูนย์หรือหนึ่งครั้ง (สูงสุดหนึ่งครั้ง) |
| - | ปรากฏครั้งหรือมากกว่านั้น (อย่างน้อยหนึ่งครั้ง) |
| - | ศูนย์หรือหลายเหตุการณ์ (ทุกเวลา) |
| {n} | ปรากฏ n ครั้ง |
| {n, m} | ปรากฏ n ถึง m ครั้ง |
| {n,} | ปรากฏอย่างน้อย n ครั้ง |
โหมดโลภและไม่ใช่ Greedy
สำหรับวิธีการจับคู่ของ {n, m}, ควรจับคู่ n หรือ m? สิ่งนี้เกี่ยวข้องกับปัญหาของรูปแบบการจับคู่ โดยค่าเริ่มต้นปริมาณการวัดจะมีอักขระที่ตรงกันมากที่สุดเท่าที่จะเป็นไปได้ซึ่งเรียกว่าโหมดโลภเช่น:
var num = '123456789'; num.match (// d {2,4}/g); // [1234], [5678], [9]สำหรับโหมดที่ถูกต้องและไม่ใช่ Greedy คุณจะต้องเพิ่ม "?" หลังจากปริมาณ ตัวอย่างเช่น {n, m}?, มันคือการจับคู่กับตัวละครน้อยที่สุดดังนี้:
var num = '123456789'; num.match (// d {2,4}?/g); // [12], [34], [56], [78], [9]การจัดกลุ่ม
ปริมาณสามารถจับคู่ได้หลายครั้งสำหรับอักขระเดียว ถ้าเราต้องการจับคู่ชุดอักขระที่แน่นอนหลายครั้ง ในการแสดงออกปกติวงเล็บสามารถกำหนดสตริงโดยรวมเป็นกลุ่ม
หากเราต้องการจับคู่คำว่า Apple ปรากฏ 4 ครั้งเราสามารถจับคู่ (Apple) {4} เช่นนี้ดังนี้:
หากคุณต้องการจับคู่แอปเปิ้ลหรือสีส้มปรากฏขึ้น 4 ครั้งคุณสามารถแทรกอักขระท่อ "|" ตัวอย่างเช่น:
(Apple | Orange) {4}
หากวงเล็บหลายตัวปรากฏในนิพจน์ทั่วไปโดยใช้การจัดกลุ่มเช่นหลายกลุ่มผลการจับคู่จะจัดกลุ่มและจำนวนการจับคู่เช่น:
(Apple)/D+(สีส้ม)
หากเราไม่ต้องการจับแพ็กเก็ตบางอย่างเราเพียงแค่ต้องทำตามเครื่องหมายคำถามและลำไส้ใหญ่ทันทีก่อนที่วงเล็บของแพ็กเก็ตตัวอย่างเช่น:
(?: Apple)/D+(สีส้ม)
เขตแดน
การแสดงออกปกติยังช่วยให้เรามีอักขระการจับคู่ขอบเขตที่ใช้กันทั่วไปหลายประการเช่น::
| อักขระ | ความหมาย |
| - | เริ่มต้นด้วย xx |
| - | ลงท้ายด้วย xx |
| /B | ขอบเขตคำอ้างถึงตัวละครอื่นนอกเหนือจาก [A-ZA-Z_0-9] |
| /B | ขอบเขตที่ไม่ใช่คำ |
ขอบเขตคำตรงกับตำแหน่งด้านหนึ่งของตำแหน่งนี้คือตัวละครที่ประกอบขึ้นเป็นคำ แต่อีกด้านหนึ่งคือตำแหน่งเริ่มต้นหรือจุดสิ้นสุดของอักขระหรือสตริงที่ไม่ใช่คำ
ดูตัวอย่าง
Lookahead ใช้เพื่อให้ตรงกับการเกิดขึ้นครั้งต่อไปของชุดอักขระเฉพาะหรือไม่
| การแสดงออก | ความหมาย |
| exp1 (? = exp2) | การแข่งขันตามด้วย exp1 ของ exp2 |
| exp1 (?! exp2) | จับคู่ exp1 ซึ่งไม่ใช่ exp2 หลังจากนั้น |
ดูตัวอย่าง:
Apple (? = Orange)
(/apple(?=orange) /).test('AppleOrange123 '); // true (/apple(?=orange) /).test('ApplePear345 '); //เท็จลองมาดูตัวอย่างอื่น:
Apple (?!
(/apple(?! // false (/apple(?! //จริง
บทความข้างต้นเป็นความคิดโบราณเกี่ยวกับไวยากรณ์นิพจน์ทั่วไป JavaScript นี่คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น