JS前端開發(fā)之exec()和match()的對比使用
前言
在前端開發(fā)過程中,關(guān)于正則表達(dá)式的相關(guān)使用想必開發(fā)者并不陌生,而且也算是一個比較常用的知識點(diǎn),尤其是在郵箱、手機(jī)號判斷校驗的時候是必備知識點(diǎn),但是一般情況下遇到這種校驗場景就是去找現(xiàn)有的正則表達(dá)式模板直接使用,因為正則表達(dá)式在JS中使用的場景比較固定,使用頻率不高,一般不會去深究正則表達(dá)式的實(shí)現(xiàn)原理,二班的情況(精通正則表達(dá)式的大佬)除外。那么本篇博文就來分享一下在JS中關(guān)于正則表達(dá)式的使用相關(guān)知識點(diǎn):exec()和match(),方便查閱使用。
exec()方法
1、定義和用法
exec()方法主要用來檢索字符串中的正則表達(dá)式的匹配。
注意:如果字符串中有匹配的值則返回該匹配值,否則返回null。
2、語法
RegExpObject.exec(string)
3、參數(shù)描述
參數(shù) | 描述 |
string | 必需的參數(shù)。要匹配的字符串 |
4、使用示例
這里的示例以在字符串中全局搜索 "World" 和 "JS" ,具體代碼如下所示:
var str="Hello World!"; //查找"World" var patt=/World/g; var result=patt.exec(str); console.log("result====>",result); //輸出結(jié)果:World //查找 "JS" patt=/JS/g; result=patt.exec(str); console.log("result====>",result); //輸出結(jié)果:null
match()方法
1、定義和用法
match() 方法主要是在字符串內(nèi)檢索指定的值,或者找到一個或多個正則表達(dá)式的匹配。
注意:match() 方法將檢索字符串 String Object,以便找到一個或多個與 regexp 匹配的文本內(nèi)容,該方法的行為在很大程度上依賴于 regexp 是否具有標(biāo)志 g。如果 regexp 沒有標(biāo)志 g,那么 match() 方法就只能在 stringObject 中執(zhí)行一次匹配。如果沒有找到任何匹配的文本, match() 將返回 null。否則,它將返回一個數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息內(nèi)容。
2、語法
string.match(regexp)
3、參數(shù)描述
參數(shù) | 描述 |
regexp | 必需的參數(shù)。規(guī)定要匹配的模式的 RegExp 對象。如果該參數(shù)不是 RegExp 對象,則需要首先把它傳遞給 RegExp 構(gòu)造函數(shù),將其轉(zhuǎn)換為 RegExp 對象。 |
4、返回值
類型 | 描述 |
Array | 存放匹配結(jié)果的數(shù)組。該數(shù)組的內(nèi)容依賴于 regexp 是否具有全局標(biāo)志 g。 如果沒找到匹配結(jié)果就返回 null 。 |
5、使用示例
①這里的示例以在字符串中全局查找 "good" ,并且不區(qū)分大小寫,具體代碼如下所示:
var str="Good good study, day day up!"; var result=str.match(/good/gi); console.log("result====>",result); //輸出結(jié)果:Good,good
②拓展示例
把11位手機(jī)號以3、4、4個數(shù)分割為三份,具體代碼如下所示:
var phone="13344445555"; //手機(jī)號為13344445555 var result = phone.match(/^(\d{3})(\d{4})(\d{4})$/); console.log("result====>",result); //輸出結(jié)果:133,4444,5555
延伸:exec()和match ()最直觀的比較
1、exec()和match ()最直觀的比較,具體如下所示:
- | -
—|—
Q | q
2、exec()和match ()的本質(zhì)區(qū)別
①若正則表達(dá)式無子表達(dá)式,且定義為非全局匹配時,exec()和match ()執(zhí)行的結(jié)果是一樣,都返回第一個匹配的字符串內(nèi)容;
②若正則表達(dá)式無子表達(dá)式,且定義為全局匹配時,exec()和match ()執(zhí)行做多處匹配內(nèi)容,只有match ()返回的是多個元素數(shù)組;
③若正則表達(dá)式有子表達(dá)式,且定義為非全局匹配時,exec()和match ()執(zhí)行的結(jié)果是一樣的;
④若正則表達(dá)式有子表達(dá)式,且定義為全局匹配時,exec()和match ()執(zhí)行的結(jié)果不一樣,其中match ()將忽略子表達(dá)式,只查找全匹配正則表達(dá)式并返回所有的內(nèi)容;
最后,exec()與全局是否定義無太大關(guān)系,但match ()則是與全局相關(guān)聯(lián)的,當(dāng)定義為非全局的時候,exec()和match ()二者執(zhí)行的結(jié)果是一樣的。
3、調(diào)用方式不同
exec()是正則表達(dá)式對象的函數(shù),參數(shù)為字符串;
match ()是字符串的函數(shù),參數(shù)為正則表達(dá)式對象。
4、全局匹配不同
在做全局匹配時,exec()僅匹配單次匹配上的內(nèi)容,而match ()會返回所有匹配上的內(nèi)容的數(shù)組;
在做全局匹配且進(jìn)行多次匹配時,exec()會從上次匹配結(jié)束的下一位開始匹配,返回本次匹配上的內(nèi)容,直至無可以匹配的內(nèi)容,最后返回null;
也就是說,在非全局的正則匹配下,exec()和match ()的返回結(jié)果是一致的,但在全局匹配的情況下,match ()返回結(jié)果集數(shù)組,exec()返回每一項匹配結(jié)果的詳細(xì)信息,但如果需要所有的返回結(jié)果,則需要循環(huán)調(diào)用該方法。
5、對參數(shù) g 的解釋不同
在有g(shù)的時候,exec()每次執(zhí)行會呈現(xiàn)出遞進(jìn)的形式,否則每次執(zhí)行的結(jié)果都是一樣的;有捕獲組的時候,總會返回當(dāng)前匹配項的捕獲組。
在有g(shù)的時候,match ()執(zhí)行全局檢索,會返回所有匹配項,沒有g(shù)的時候match ()只會返回第一個匹配項;有捕獲組的情況下,match ()只有在沒有g(shù)的情況下,才會返回第一個匹配項的捕獲組。
最后
通過上面介紹的JS中exec和match的對比使用總結(jié),是不是徹底掌握了相關(guān)知識點(diǎn)以及使用原理?這個知識點(diǎn)很重要,只要完全掌握其原理之后不管以后在前端開發(fā)過程中有關(guān)exec和match的使用,都能輕松應(yīng)對,這里不再過多贅述重要性。
到此這篇關(guān)于JS前端開發(fā)之exec()和match()對比使用的文章就介紹到這了,更多相關(guān)JS exec()和match()的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原生JS實(shí)現(xiàn)各種運(yùn)動之復(fù)合運(yùn)動
這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)各種運(yùn)動之復(fù)合運(yùn)動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08