正則表達(dá)式中 test、exec、match 方法區(qū)別

2018-09-12 13:51 更新

正則表達(dá)式中 test、exec、match 方法區(qū)別

一、String對象支持四種利用正則表達(dá)式的方法,分別為

search(),replace(),match(),split()

1、search()方法以正則表達(dá)式作為參數(shù),返回第一個與之匹配的子串開始的位置,如果沒有任何與之匹配的子串,它返回-1。

2、replace()方法執(zhí)行檢索和替換操作,它的第一個參數(shù)是正則表達(dá)式,第二個參數(shù)是要進(jìn)行替換的字符串或者閉包。

3、 match()方法的唯一一個參數(shù)是正則表達(dá)式,它的行為取決于這個正則表達(dá)式的標(biāo)志,如果正則表達(dá)式包含了標(biāo)志g,它的返回值就是包含了出現(xiàn)在字符串中 匹配的數(shù)組。如果該正則表達(dá)式不包含標(biāo)志g,它也返回一個數(shù)組,它的第一個元素是匹配的字符串,余下的元素則是正則表達(dá)式中的各個分組。

4、split()方法是能夠支持模式匹配的。

二、RegExp對象定義了兩個用于模式匹配的方法,它們是exec()和test()

1、 RegExp的exec()方法和String的match()方法很類似,它對一個指定的字符串執(zhí)行一個正則表達(dá)式匹配,如果沒有找到任何一個匹配,它 將返回null,否則返回一個數(shù)組,這個數(shù)組的第一個元素包含的是與正則表達(dá)式相匹配的字符串,余下的所有元素包含的是匹配的各個分組。而且,正則表達(dá)式 對象的index屬性還包含了匹配發(fā)生的字符串的位置,屬性input引用的則是被檢索的字符串。 如果正則表達(dá)式具有g(shù)標(biāo)志,它將把該對象的lastIndex屬性設(shè)置到緊接著匹配字符串的位置開始檢索,如果exec()沒有發(fā)現(xiàn)任何匹配,它將把 lastIndex屬性重置為0,這一特殊的行為可以使你可以反復(fù)調(diào)用exec()遍歷一個字符串中所有的正則表達(dá)式匹配。

2、RegExp對象的test()參數(shù)為一個字符串,如果這個字符串包含正則表達(dá)式的一個匹配,它就返回true,否則返回false 當(dāng)一個具有g(shù)標(biāo)志的正則表達(dá)式調(diào)用test()方法時,它的行為和exec()相同,既它從lastIndex處開始檢索特定的字符串,如果它發(fā)現(xiàn)匹配,就將lastIndex設(shè)置為緊接在那個匹配之后的字符的位置,這樣我們就可以使用方法test()來遍歷字符串了。

test

test 返回 Boolean,查找對應(yīng)的字符串中是否存在模式。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // true

exec

exec 查找并返回當(dāng)前的匹配結(jié)果,并以數(shù)組的形式返回。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); var arr = reg.exec(str);

如果不存在模式,則 arr 為 null,否則 arr 總是一個長度為 1 的數(shù)組,其值就是當(dāng)前匹配項(xiàng)。arr 還有三個屬性:index 當(dāng)前匹配項(xiàng)的位置;lastIndex 當(dāng)前匹配項(xiàng)結(jié)束的位置(index + 當(dāng)前匹配項(xiàng)的長度);input 如上示例中 input 就是 str。

exec 方法受參數(shù) g 的影響。若指定了 g,則下次調(diào)用 exec 時,會從上個匹配的 lastIndex 開始查找。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]);

上述兩個輸出都是 1a。現(xiàn)在再看看指定參數(shù) g: var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]);

上述第一個輸出 1a,第二個輸出 1b。

match

match 是 String 對象的一個方法。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(str.match(reg));

match 這個方法有點(diǎn)像 exec,但:exec 是 RegExp 對象的方法;math 是 String 對象的方法。二者還有一個不同點(diǎn),就是對參數(shù) g 的解釋。

如果指定了參數(shù) g,那么 match 一次返回所有的結(jié)果。 var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(str.match(reg)); //alert(str.match(reg)); // 此句同上句的結(jié)果是一樣的

此結(jié)果為一個數(shù)組,有三個元素,分別是:1a、1b、1c。

compile 方法把正則表達(dá)式編譯為內(nèi)部格式,從而執(zhí)行得更快。 var reg = new RegExp(); reg.compile("[a-z]{5}", "g"); alert(reg.test("cftea"));

當(dāng)使用同一個正則表達(dá)式,進(jìn)行多次使用時(比如在循環(huán)中),效果顯著。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號