นิพจน์ทั่วไปอธิบายรูปแบบของการจับคู่สตริงซึ่งสามารถใช้เพื่อตรวจสอบว่าสตริงมีสตริงย่อยบางอันแทนที่สตริงย่อยที่ตรงกันหรือถอดสายย่อยที่ตรงกับเงื่อนไขที่แน่นอนจากสตริงที่แน่นอน ฯลฯ ฯลฯ
เนื่องจากการแสดงออกปกติไม่ได้ใช้บ่อยจึงง่ายต่อการลืมพวกเขาบ่อยครั้ง ตัวแก้ไขต่อไปนี้แสดงฟังก์ชั่นและฟังก์ชั่นที่ใช้กันทั่วไปที่นี่ในลักษณะที่กระชับสำหรับการรับชมในอนาคต:
มี 2 ฟังก์ชั่นที่ใช้กันทั่วไปของวัตถุ regexp
1. ฟังก์ชั่นทดสอบ
การใช้งาน: regexpobject.test (สตริง)
return: true ถ้าสตริงสตริงมีการจับคู่ข้อความ regexpobject มิฉะนั้นเท็จ
คำอธิบาย: ไม่มีอะไรพิเศษเกี่ยวกับวิธีนี้และไม่มีการรักษาพิเศษสำหรับตัวดัดแปลง G
ตัวอย่าง:
var url = 'http://www.baidu.com?a=1&b=2&c=3';var reg = /a=1/;console.log(reg.test(url)); // ผลลัพธ์ผลลัพธ์เป็นจริง
2. ฟังก์ชั่น EXEC
การใช้งาน: regexpobject.exec (สตริง)
return: ส่งคืนอาร์เรย์ที่เก็บผลลัพธ์การจับคู่ หากไม่พบการจับคู่ค่าส่งคืนจะเป็นโมฆะ
อธิบาย:
วิธี EXEC () มีประสิทธิภาพมาก มันเป็นวิธีการทั่วไปและมีความซับซ้อนในการใช้มากกว่าวิธีการทดสอบ () และวิธีการที่รองรับการแสดงออกปกติ
หาก exec () ค้นหาข้อความที่ตรงกันจะส่งคืนอาร์เรย์ผลลัพธ์ มิฉะนั้นให้ส่งคืนโมฆะ องค์ประกอบที่ 0 ของอาร์เรย์นี้คือข้อความที่ตรงกับนิพจน์ทั่วไปองค์ประกอบที่ 1 คือข้อความที่ตรงกับการแสดงออกของ subexpression ครั้งที่ 1 ของ regexpObject ถ้ามีองค์ประกอบที่ 2 คือข้อความที่ตรงกับการแสดงออกของ subexpression ที่ 2 ของ regexpobject และอื่น ๆ นอกเหนือจากแอตทริบิวต์องค์ประกอบอาร์เรย์และความยาวแล้วเมธอด exec () จะส่งคืนคุณสมบัติสองคุณสมบัติ คุณสมบัติดัชนีประกาศตำแหน่งของอักขระตัวแรกที่ตรงกับข้อความ คุณสมบัติอินพุตเก็บสตริงสตริงที่ดึงมา เราจะเห็นได้ว่าเมื่อเรียกใช้เมธอด exec () ของวัตถุที่ไม่ใช่ global regexp อาร์เรย์ที่ส่งคืนจะเหมือนกับอาร์เรย์ที่ส่งคืนโดยเรียกสตริงเมธอด. match ()
อย่างไรก็ตามเมื่อ regexpobject เป็นนิพจน์ทั่วไปทั่วโลกพฤติกรรมของ exec () จะซับซ้อนกว่าเล็กน้อย มันเริ่มค้นหาสตริงสตริงที่อักขระที่ระบุโดยคุณสมบัติ LastIndex ของ regexpobject เมื่อ EXEC () พบข้อความที่ตรงกับนิพจน์หลังจากการจับคู่มันจะตั้งค่าคุณสมบัติ LastIndex ของ RegexPobject ไปยังตำแหน่งถัดไปของอักขระสุดท้ายของข้อความที่ตรงกัน กล่าวคือคุณสามารถวนซ้ำข้อความที่ตรงกันทั้งหมดในสตริงโดยเรียกวิธี EXEC () ซ้ำ ๆ เมื่อ EXEC () ไม่สามารถหาข้อความที่ตรงกันได้อีกต่อไปจะส่งคืนค่า NULL และรีเซ็ตคุณสมบัติ LastIndex เป็น 0
ตัวอย่าง:
การแสดงออกปกติด้วย modifier g
var url = 'http://www.baidu.com?a=1&b=2&c=3';VAR reg = /( [[[[8 // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likeconsole.log(reg.exec(url)); // ["b = 2", "b", "2", ดัชนี: 25, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likeconsole.log(reg.exec(url)); // ["C = 3", "C", "3", ดัชนี: 29, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likconsole.log(reg.exec(url)); //nullreg.lastindex = 0; // รหัสนี้มีความสำคัญมากโปรดใส่ใจกับการทำความเข้าใจ console.log (reg.exec (url)); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: http://www.baidu.com?a=1&b=2&c=3]
นิพจน์ปกติโดยไม่ต้องดัดแปลง G
var url = 'http://www.baidu.com?a=1&b=2&c=3';VAR reg = /( [[[[8 // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likeconsole.log(reg.exec(url)); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likeconsole.log(reg.exec(url)); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likeconsole.log(reg.exec(url)); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3"lik.lastindex = 0; console.log (reg.exec (url)); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3"lik.lastindex = 0; console.log (reg.exec (url)); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: http://www.baidu.com?a=1&b=2&c=3]
คุณพบสิ่งที่แตกต่างไปหรือไม่? อ่านฟังก์ชั่นคำอธิบายอย่างระมัดระวังและคุณจะเข้าใจ ^_ ^
มี 4 ฟังก์ชั่นของวัตถุสตริงที่รองรับความสม่ำเสมอเราจะพูดถึงเพียง 2 ของพวกเขาเท่านั้น
1. ฟังก์ชั่นการจับคู่
การใช้งาน: StringObject.match (searchValue | regexp) ที่นี่เราพูดถึงโหมด regexp เฉพาะ
ค่าส่งคืน: อาร์เรย์ที่เก็บผลลัพธ์ที่ตรงกัน เนื้อหาของอาร์เรย์นี้ขึ้นอยู่กับว่า regexp มีธงทั่วโลก g
อธิบาย:
วิธีการจับคู่ () จะดึงสตริงสตริงเพื่อค้นหาการจับคู่ข้อความอย่างน้อยหนึ่งรายการ พฤติกรรมของวิธีนี้ขึ้นอยู่กับว่า Regexp มีธง G หรือไม่
หาก regexp ไม่มีธง G วิธีการจับคู่ () สามารถทำการจับคู่หนึ่งครั้งใน StringObject หากไม่พบข้อความที่ตรงกันให้จับคู่ () ส่งคืนค่า NULL มิฉะนั้นจะส่งคืนอาร์เรย์ที่เก็บข้อมูลเกี่ยวกับข้อความที่ตรงกันที่พบ องค์ประกอบที่ 0 ของอาร์เรย์เก็บข้อความที่ตรงกันในขณะที่ข้อความ REST Store ที่ตรงกับการแสดงออกของนิพจน์ทั่วไป นอกเหนือจากองค์ประกอบอาร์เรย์ปกติเหล่านี้อาร์เรย์ที่ส่งคืนยังมีคุณสมบัติวัตถุสองอย่าง แอตทริบิวต์ดัชนีประกาศตำแหน่งของอักขระเริ่มต้นที่ตรงกับข้อความใน StringObject และแอตทริบิวต์อินพุตประกาศการอ้างอิงถึง StringObject
หาก regexp มีธง g เมธอดการจับคู่ () จะทำการค้นหาทั่วโลกให้ค้นหาสตริงย่อยที่ตรงกันทั้งหมดใน StringObject หากไม่พบสตริงย่อยที่ตรงกัน NULL จะถูกส่งคืน หากพบวัสดุย่อยที่ตรงกันหนึ่งรายการหรือมากกว่านั้นจะส่งคืนอาร์เรย์ อย่างไรก็ตามเนื้อหาของอาร์เรย์ที่กลับมาโดย Global Match นั้นแตกต่างจากอดีตมาก องค์ประกอบอาร์เรย์เก็บสตริงย่อยที่ตรงกันทั้งหมดใน StringObject และไม่มีแอตทริบิวต์ดัชนีหรือแอตทริบิวต์อินพุต
ตัวอย่าง:
ไม่มีตัวดัดแปลง g
var url = 'http://www.baidu.com?a=1&b=2&c=3';var reg =/([^? & =]+) = ([^? & =])*/; var result = url.match (reg); console.log (ผลลัพธ์); // ["a = 1", "a", "1", ดัชนี: 21, อินพุต: "http://www.baidu.com?a=1&b=2&c=3" likenconsole.log(result.index); //21console.log(result.input); //http://www.baidu.com?
ด้วย modifier g
var url = 'http://www.baidu.com?a=1&b=2&c=3';var reg =/([^? & =]+) = ([^? & =])*/g; var result = url.match (reg); console.log // ["a = 1", "b = 2", "c = 3"] console.log (result.index); //undefinedConsole.log(result.input); // ไม่ได้กำหนด
คุณพบสิ่งที่แตกต่างไปหรือไม่? อ่านฟังก์ชั่นคำอธิบายอย่างระมัดระวังและคุณจะเข้าใจ ^_ ^
2. แทนที่ฟังก์ชั่น
การใช้งาน: StringObject.replace (regexp/substr, แทนที่)
ค่าส่งคืน: สตริงใหม่ที่ได้รับหลังจากแทนที่การจับคู่แรกหรือการจับคู่ทั้งหมดของ regexp ด้วยการเปลี่ยน
คำอธิบาย: วิธีการแทนที่ () ของสตริง StringObject ดำเนินการค้นหาและแทนที่การดำเนินการ มันจะมองหา regexp การจับคู่ substrings ใน StringObject และแทนที่ substrings เหล่านั้นด้วยการเปลี่ยน หาก regexp มีธง Global Global วิธีแทนที่ () จะแทนที่สตริงย่อยที่ตรงกันทั้งหมด มิฉะนั้นจะแทนที่สตริงย่อยที่ตรงกันเท่านั้น
การเปลี่ยนอาจเป็นสตริงหรือฟังก์ชั่น หากเป็นสตริงการจับคู่แต่ละครั้งจะถูกแทนที่ด้วยสตริง แต่อักขระ $ ในการแทนที่มีความหมายเฉพาะ ดังที่แสดงในตารางต่อไปนี้จะระบุว่าสตริงที่ได้จากการจับคู่รูปแบบจะถูกใช้เพื่อทดแทน
| อักขระ | แทนที่ข้อความ |
|---|---|
| $ 1, $ 2, ... $ 99 | ข้อความที่ตรงกับการแสดงออกของ subexpressions 1 ถึง 99 ใน regexp |
| - | สตริงย่อยที่ตรงกับ regexp |
| - | ส่งข้อความไปทางซ้ายของสตริงย่อยที่ตรงกัน |
| - | ส่งข้อความไปทางด้านขวาของสตริงย่อยที่ตรงกัน |
| - | สัญลักษณ์การวัดโดยตรง (หมายความว่าเมื่อคุณต้องการแทนที่ด้วยสัญลักษณ์ $ ให้เขียนสอง $) |
ตัวอย่าง:
ไม่มีตัวดัดแปลง g
var url = 'http://www.baidu.com?a=1&b=2&c=3';var reg =/([^? & =]+) = ([^? & =])*/; var url1 = url.replace http://www.baidu.com?a=1&b=2&c=3return 'ตกลง';}) console.log (url1); //http://www.baidu.com?ok&b=2&c=3
ด้วย modifier g
var url = 'http://www.baidu.com?a=1&b=2&c=3';var reg =/([^? & =]+) = ([^? & =])*/g; var url1 = url.replace a = 1, a, 1, 21, http://www.baidu.com?a=1&b=2&c=3 และ b = 2, b, 2, 25, http://www.baidu.com?a=1&b=2&c=3 และ | 'ตกลง';}) console.log (url1); //http://www.baidu.com?ok&ok&ok
เมื่อพารามิเตอร์ที่สองเป็นสตริง
var url = 'http://www.baidu.com?a=1&b=2&c=3';var reg =/([^? & =]+) = ([^? & =])*/; // ไม่มี modifier gvar url1 = url.replace (reg, "$ &") console.log (url1); //http://www.baidu.com?a=1&b=2&c=3var url1 = url.replace (reg, "$ 1") console.log (url1); //http://www.baidu.com?a&b=2&c=3var url1 = url.replace (reg, "$ 2") console.log (url1); //http://www.baidu.com?1&b=2&c=3var url1 = url.replace (reg, "$ '") console.log (url1); //http://www.baidu.com?&b=2&c=3&b=2&c=3var reg =/([^? & =]+) = ([^? & =])*/g; // ด้วย modifier gvar url1 = url.replace (reg, "$ &") console.log (url1); //http://www.baidu.com?a=1&b=2&c=3var url1 = url.replace (reg, "$ 1") console.log (url1); //http://www.baidu.com?a&b&cvar url1 = url.replace (reg, "$ 2") console.log (url1); //http://www.baidu.com?1&2&3var url1 = url.replace (reg, "$ '") console.log (url1); //http://www.baidu.com?&b=2&c=3&c=3&
ข้างต้นคือการวิเคราะห์ที่ครอบคลุมของการจับคู่, แทนที่, exec และฟังก์ชั่นอื่น ๆ ในสตริง JS และการแสดงออกปกติที่แนะนำโดยโปรแกรมแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!