.match ()ฟังก์ชั่นstr.match(regexp)
จะทำต่อไปนี้:
- ถ้ามีก็คือการแข่งขันก็จะกลับ:
- ถ้า
g
ธงถูกนำมาใช้ใน regexp: มันจะกลับสตริงทั้งหมด(ไม่สนใจกลุ่มจับภาพ)
- หากไม่ได้ใช้
g
แฟล็กใน regexp: มันจะส่งคืนเหมือนเดิมregexp.exec(str)
- หากไม่มีการแข่งขันจะส่งคืน:
ตัวอย่างของ. match ()โดยใช้g
แฟล็ก :
var str = "qqqABApppabacccaba";
var e1, e2, e3, e4, e5;
e1 = str.match(/nop/g); //null
e2 = str.match(/no(p)/g); //null
e3 = str.match(/aba/g); //["aba", "aba"]
e4 = str.match(/aba/gi); //["ABA", "aba", "aba"]
e5 = str.match(/(ab)a/g); //["aba", "aba"] ignoring capture groups as it is using the g flag
และ. match () ที่ไม่มีg
แฟล็กจะเทียบเท่ากับ. exec () :
e1=JSON.stringify(str.match(/nop/))===JSON.stringify(/nop/.exec(str)); //true
//e2 ... e4 //true
e5=JSON.stringify(str.match(/(ab)a/))===JSON.stringify(/(ab)a/.exec(str)); //true
.exec ()ฟังก์ชั่นregexp.exec(str)
จะทำต่อไปนี้:
- ถ้ามีก็คือการแข่งขันก็จะกลับ:
- ถ้า
g
ธงถูกนำมาใช้ใน regexp: มันจะกลับมา(แต่ละครั้งจะเรียกว่า) : [N_MatchedStr, N_Captured1, N_Captured2, ...]
การต่อไปN
การแข่งขัน สำคัญ:มันจะไม่เข้าสู่การจับคู่ครั้งต่อไปหากวัตถุ regexp ไม่ได้ถูกเก็บไว้ในตัวแปร (จำเป็นต้องเป็นวัตถุเดียวกัน)
- หากไม่ได้ใช้
g
แฟล็กใน regexp จะส่งคืนเหมือนเดิมราวกับว่ามีแฟล็กและถูกเรียกเป็นครั้งแรกและครั้งเดียวg
- หากไม่มีการแข่งขันจะส่งคืน:
ตัวอย่างของ. exec () (จัดเก็บ regexp + โดยใช้g
แฟล็ก = มันเปลี่ยนไปตามการเรียกแต่ละครั้ง):
var str = "qqqABApppabacccaba";
var myexec, rgxp = /(ab)a/gi;
myexec = rgxp.exec(str);
console.log(myexec); //["ABA", "AB"]
myexec = rgxp.exec(str);
console.log(myexec); //["aba", "ab"]
myexec = rgxp.exec(str);
console.log(myexec); //["aba", "ab"]
myexec = rgxp.exec(str);
console.log(myexec); //null
//But in this case you should use a loop:
var mtch, myRe = /(ab)a/gi;
while(mtch = myRe.exec(str)){ //infinite looping with direct regexps: /(ab)a/gi.exec()
console.log("elm: "+mtch[0]+" all: "+mtch+" indx: "+myRe.lastIndex);
//1st iteration = elm: "ABA" all: ["ABA", "AB"] indx: 6
//2nd iteration = elm: "aba" all: ["aba", "ab"] indx: 12
//3rd iteration = elm: "aba" all: ["aba", "ab"] indx: 18
}
ตัวอย่างของ. exec ()เมื่อไม่มีการเปลี่ยนแปลงในการเรียกแต่ละครั้ง:
var str = "qqqABApppabacccaba", myexec, myexec2;
//doesn't go into the next one because no g flag
var rgxp = /(a)(ba)/;
myexec = rgxp.exec(str);
console.log(myexec); //["aba", "a", "ba"]
myexec = rgxp.exec(str);
console.log(myexec); //["aba", "a", "ba"]
//... ["aba", "a", "ba"]
//doesn't go into the next one because direct regexp
myexec2 = /(ab)a/gi.exec(str);
console.log(myexec2); //["ABA", "AB"]
myexec2 = /(ab)a/gi.exec(str);
console.log(myexec2); //["ABA", "AB"]
//... ["ABA", "AB"]
exec
เพื่อรับตัวเลือกย่อยทั้งหมด