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