正則表達(dá)式中 test、exec、match 方法區(qū)別
一、String對(duì)象支持四種利用正則表達(dá)式的方法,分別為
search(),replace(),match(),split()
1、search()方法以正則表達(dá)式作為參數(shù),返回第一個(gè)與之匹配的子串開始的位置,如果沒有任何與之匹配的子串,它返回-1。
2、replace()方法執(zhí)行檢索和替換操作,它的第一個(gè)參數(shù)是正則表達(dá)式,第二個(gè)參數(shù)是要進(jìn)行替換的字符串或者閉包。
3、 match()方法的唯一一個(gè)參數(shù)是正則表達(dá)式,它的行為取決于這個(gè)正則表達(dá)式的標(biāo)志,如果正則表達(dá)式包含了標(biāo)志g,它的返回值就是包含了出現(xiàn)在字符串中 匹配的數(shù)組。如果該正則表達(dá)式不包含標(biāo)志g,它也返回一個(gè)數(shù)組,它的第一個(gè)元素是匹配的字符串,余下的元素則是正則表達(dá)式中的各個(gè)分組。
4、split()方法是能夠支持模式匹配的。
二、RegExp對(duì)象定義了兩個(gè)用于模式匹配的方法,它們是exec()和test()
1、 RegExp的exec()方法和String的match()方法很類似,它對(duì)一個(gè)指定的字符串執(zhí)行一個(gè)正則表達(dá)式匹配,如果沒有找到任何一個(gè)匹配,它 將返回null,否則返回一個(gè)數(shù)組,這個(gè)數(shù)組的第一個(gè)元素包含的是與正則表達(dá)式相匹配的字符串,余下的所有元素包含的是匹配的各個(gè)分組。而且,正則表達(dá)式 對(duì)象的index屬性還包含了匹配發(fā)生的字符串的位置,屬性input引用的則是被檢索的字符串。 如果正則表達(dá)式具有g(shù)標(biāo)志,它將把該對(duì)象的lastIndex屬性設(shè)置到緊接著匹配字符串的位置開始檢索,如果exec()沒有發(fā)現(xiàn)任何匹配,它將把 lastIndex屬性重置為0,這一特殊的行為可以使你可以反復(fù)調(diào)用exec()遍歷一個(gè)字符串中所有的正則表達(dá)式匹配。
2、RegExp對(duì)象的test()參數(shù)為一個(gè)字符串,如果這個(gè)字符串包含正則表達(dá)式的一個(gè)匹配,它就返回true,否則返回false 當(dāng)一個(gè)具有g(shù)標(biāo)志的正則表達(dá)式調(diào)用test()方法時(shí),它的行為和exec()相同,既它從lastIndex處開始檢索特定的字符串,如果它發(fā)現(xiàn)匹配,就將lastIndex設(shè)置為緊接在那個(gè)匹配之后的字符的位置,這樣我們就可以使用方法test()來遍歷字符串了。
test
exec
exec 查找并返回當(dāng)前的匹配結(jié)果,并以數(shù)組的形式返回。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); var arr = reg.exec(str);
如果不存在模式,則 arr 為 null,否則 arr 總是一個(gè)長(zhǎng)度為 1 的數(shù)組,其值就是當(dāng)前匹配項(xiàng)。arr 還有三個(gè)屬性:index 當(dāng)前匹配項(xiàng)的位置;lastIndex 當(dāng)前匹配項(xiàng)結(jié)束的位置(index + 當(dāng)前匹配項(xiàng)的長(zhǎng)度);input 如上示例中 input 就是 str。
exec 方法受參數(shù) g 的影響。若指定了 g,則下次調(diào)用 exec 時(shí),會(huì)從上個(gè)匹配的 lastIndex 開始查找。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]);
上述兩個(gè)輸出都是 1a?,F(xiàn)在再看看指定參數(shù) g: var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]);
match
match 是 String 對(duì)象的一個(gè)方法。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(str.match(reg));
match 這個(gè)方法有點(diǎn)像 exec,但:exec 是 RegExp 對(duì)象的方法;math 是 String 對(duì)象的方法。二者還有一個(gè)不同點(diǎn),就是對(duì)參數(shù) g 的解釋。
如果指定了參數(shù) g,那么 match 一次返回所有的結(jié)果。 var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(str.match(reg)); //alert(str.match(reg)); // 此句同上句的結(jié)果是一樣的
compile 方法把正則表達(dá)式編譯為內(nèi)部格式,從而執(zhí)行得更快。 var reg = new RegExp(); reg.compile("[a-z]{5}", "g"); alert(reg.test("cftea"));
當(dāng)使用同一個(gè)正則表達(dá)式,進(jìn)行多次使用時(shí)(比如在循環(huán)中),效果顯著。
更多建議: