javascript的正則匹配方法學(xué)習(xí)
javascript中正則匹配有3個(gè)方法,match,exec,test。這些方法都跟字符串和RegExp對(duì)象有關(guān),但使用場(chǎng)景不一樣,容易混淆。match是字符串的一個(gè)方法,接收一個(gè)RegExp對(duì)象做為參數(shù),其他的是RegExp對(duì)象的方法,接收一個(gè)字符串參數(shù)。
var str = 'abcdef12ab34cd56ef'; var patt = new RegExp('ab'); //主意是非全局匹配 var ret_test = patt.test(str); console.log(ret_test); var ret_match = str.match(patt); console.log(ret_match); var ret_exec = patt.exec(str); console.log(ret_exec);
1. regExp.test(string)
該方法最簡(jiǎn)單,在string中找到匹配regExp的字符串則返回true,沒(méi)找到匹配的字符串則返回false
2. regExp.exec(string)
該方法稍微復(fù)雜些。
當(dāng)regExp沒(méi)有全局標(biāo)志時(shí),其返回值為字符串?dāng)?shù)組:數(shù)組的第0號(hào)元素為剛匹配到的字符串,如果regExp有子表達(dá)式,則數(shù)組第1號(hào)元素為regExp的第一個(gè)子表達(dá)式,第2號(hào)元素為regExp的第二個(gè)字表達(dá)式...以此類(lèi)推。在上例中如果 patt = new RegExp('f(\\d)(\\d)','g');則 ret_exec 將為字符串?dāng)?shù)組:['f12','1','2']。
當(dāng)regExp有全局標(biāo)志(g選項(xiàng))時(shí),返回值為第一個(gè)匹配到的字符串組成的數(shù)組,數(shù)組的第0號(hào)元素為剛匹配到的字符串,如果regExp有子表達(dá)式,則數(shù)組第1號(hào)元素為regExp的第一個(gè)子表達(dá)式,第2號(hào)元素為regExp的第二個(gè)字表達(dá)式...以此類(lèi)推。同時(shí)主意,regExp對(duì)象的一個(gè)屬性(lastIndex)被改變了,lastIndex被設(shè)置為那個(gè)字符串最后一個(gè)字符所在的位置,其的后面的那個(gè)位置(在上例中是lastIndex = 2)。當(dāng)再次調(diào)用 regExp.exec(string)時(shí),搜索范圍將從regExp.lastIndex開(kāi)始搜索。此時(shí)返回值仍然是單元素的字符串?dāng)?shù)組,lastIndex = 10 。我們經(jīng)常用while循環(huán)來(lái)遍歷字符串中的匹配:
var patt = new RegExp('ab', 'g'), str = 'abcdef12ab34cd56ef', ret; while((ret = patt.exec(str))!=null) { console.log(ret); } //輸出 ['ab'] ['ab']
exec方法返回的不是標(biāo)準(zhǔn)的數(shù)組,應(yīng)該算是一個(gè)類(lèi)數(shù)組,因?yàn)樗€有2個(gè)屬性:input是輸入的字符串,index是當(dāng)前匹配的字符串第一個(gè)字符在input中的位置。
3. string.match(regExp)
該方法比exec簡(jiǎn)單一些,因?yàn)樗挥每紤]regExp的lastIndex屬性。同樣,也需要分兩種情況(全局匹配與非全局匹配)
當(dāng)regExp沒(méi)有全局標(biāo)志時(shí),返回值與調(diào)用exec一樣,返回一個(gè)數(shù)組,數(shù)組的第0號(hào)元素為剛匹配到的字符串,如果regExp有子表達(dá)式,則數(shù)組第1號(hào)元素為regExp的第一個(gè)子表達(dá)式,第2號(hào)元素為regExp的第二個(gè)字表達(dá)式...以此類(lèi)推。主意該數(shù)組同時(shí)還有2個(gè)屬性:input是輸入的字符串string,index是當(dāng)前匹配的字符串第一個(gè)字符在input中的位置。
當(dāng)regExp有全局標(biāo)志(g選項(xiàng))時(shí),很簡(jiǎn)單,也符合我們的理解:返回所有匹配到的字符串組成的數(shù)組。這是標(biāo)準(zhǔn)數(shù)組,沒(méi)有input屬性,也沒(méi)有index屬性。返回值數(shù)組中除了匹配到的字符串沒(méi)有任何其他信息。
從上面的分析看出,如果你只是想判斷字符串是否匹配某個(gè)正則表達(dá)式,就用test方法。如果想一次性取出所有匹配到的字符串,或者只找到第一個(gè)匹配的字符串就可以,就用match方法。如果你想多次匹配,而且需要知道每個(gè)匹配到的字符串在原始字符串中的位置,或者正則表達(dá)式中還有子表達(dá)式信息需要關(guān)注,就用exec方法。
以上就是javascript正則匹配的多種方法介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Document:getElementsByName()使用方法及示例
Document:getElementsByName()想必大家對(duì)它并不陌生吧,主要是根據(jù)名稱獲取元素,下面是其具體的使用方法及范例,感興趣的朋友不要錯(cuò)過(guò)2013-10-10window.location和document.location的區(qū)別分析
用戶不能改變document.location(因?yàn)檫@是當(dāng)前顯示文檔的位置)。但是,可以改變window.location (用其它文檔取代當(dāng)前文檔)window.location本身也是一個(gè)對(duì)象,而document.location不是對(duì)象2008-12-12JS操作字符串轉(zhuǎn)換為數(shù)值并取整的代碼
這篇文章主要介紹了JS操作字符串轉(zhuǎn)換為數(shù)值并取整的代碼,代碼比較短,需要的朋友可以參考下2014-01-01javascript簡(jiǎn)單實(shí)現(xiàn)深淺拷貝過(guò)程詳解
這篇文章主要介紹了javascript簡(jiǎn)單實(shí)現(xiàn)深淺拷貝過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Java通過(guò)WebSocket實(shí)現(xiàn)異步導(dǎo)出解決思路
這篇文章主要介紹了通過(guò)WebSocket實(shí)現(xiàn)異步導(dǎo)出,本篇文章記錄大批量數(shù)據(jù)導(dǎo)出時(shí)間過(guò)長(zhǎng),導(dǎo)致接口請(qǐng)求超時(shí)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01基于bootstrap的文件上傳控件bootstrap fileinput
這篇文章主要為大家詳細(xì)介紹了基于bootstrap的文件上傳控件bootstrap fileinput,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12