JavaScript正則表達(dá)式下之相關(guān)方法
上篇文章給大家介紹了JavaScript 正則表達(dá)式上之基本語法介紹了JavaScript正則表達(dá)式的語法,有了這些基本知識(shí),可以看看正則表達(dá)式在JavaScript的應(yīng)用了,在一切開始之前,看看RegExp實(shí)例的幾個(gè)屬性
RegExp實(shí)例對(duì)象有五個(gè)屬性
1.global:是否全局搜索,默認(rèn)是false
2.ignoreCase:是否大小寫敏感,默認(rèn)是false
3.multiline:多行搜索,默認(rèn)值是false
4.lastIndex:是當(dāng)前表達(dá)式模式首次匹配內(nèi)容中最后一個(gè)字符的下一個(gè)位置,每次正則表達(dá)式成功匹配時(shí),lastIndex屬性值都會(huì)隨之改變。
5.source:正則表達(dá)式的文本字符串
除了將正則表達(dá)式編譯為內(nèi)部格式從而使執(zhí)行更快的compile()方法,對(duì)象還有兩個(gè)我們常用的方法
regObj.test(strObj)
方法用于測(cè)試字符串參數(shù)中是否存正則表達(dá)式模式,如果存在則返回true,否則返回false
var reg=/\d+\.\d{1,2}$/g;reg.test('123.45'); //truereg.test('0.2'); //truereg.test('a.34'); //falsereg.test('34.5678'); //false
regObj.exec(strObj)
方法用于正則表達(dá)式模式在字符串中運(yùn)行查找,如果 exec() 找到了匹配的文本,則返回一個(gè)結(jié)果數(shù)組。否則,返回 null。除了數(shù)組元素和 length 屬性之外,exec() 方法還返回兩個(gè)屬性。index 屬性聲明的是匹配文本的第一個(gè)字符的位置。input 屬性則存放的是被檢索的字符串 string。
調(diào)用非全局的 RegExp對(duì)象的 exec() 時(shí),返回?cái)?shù)組的第 0 個(gè)元素是與正則表達(dá)式相匹配的文本,第 1 個(gè)元素是與 RegExpObject 的第 1 個(gè)子表達(dá)式相匹配的文本(如果有的話),第 2 個(gè)元素是與 RegExp對(duì)象的第 2 個(gè)子表達(dá)式相匹配的文本(如果有的話),以此類推。
調(diào)用全局的RegExp對(duì)象的 exec()時(shí),它會(huì)在 RegExp實(shí)例的 lastIndex 屬性指定的字符處開始檢索字符串 string。當(dāng) exec() 找到了與表達(dá)式相匹配的文本時(shí),在匹配后,它將把 RegExp實(shí)例的 lastIndex 屬性設(shè)置為匹配文本的最后一個(gè)字符的下一個(gè)位置??梢酝ㄟ^反復(fù)調(diào)用 exec() 方法來遍歷字符串中的所有匹配文本。當(dāng) exec() 再也找不到匹配的文本時(shí),它將返回 null,并把 lastIndex 屬性重置為 0。
var reg=/\d/g;var r=reg.exec('a1b2c3'); console.log(reg.lastIndex); //2r=reg.exec('a1b2c3');console.log(reg.lastIndex); //4
兩次執(zhí)行r的結(jié)果
var reg=/\d/g;while(r=reg.exec('a1b2c3')){ console.log(r.index+':'+r[0]);}
可以看到結(jié)果:
除了上面的兩個(gè)方法,有些字符串函數(shù)可以傳入RegExp對(duì)象作為參數(shù),進(jìn)行一些復(fù)雜的操作
strObj.search(RegObj)
search() 方法用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串。search() 方法不執(zhí)行全局匹配,它將忽略標(biāo)志 g。它同時(shí)忽略 regexp 的 lastIndex 屬性,并且總是從字符串的開始進(jìn)行檢索,這意味著它總是返回 stringObject 的第一個(gè)匹配的位置。
'a1b2c3'.search(/\d/g); //1'a1b2c3'.search(/\d/); //1
strObj.match(RegObj)
match() 方法將檢索字符串 stringObject,以找到一個(gè)或多個(gè)與 regexp 匹配的文本。但regexp是否具有標(biāo)志 g對(duì)結(jié)果影響很大。
如果 regexp 沒有標(biāo)志 g,那么 match() 方法就只能在 strObj 中執(zhí)行一次匹配。如果沒有找到任何匹配的文本, match() 將返回 null。否則,它將返回一個(gè)數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息。該數(shù)組的第 0 個(gè)元素存放的是匹配文本,而其余的元素存放的是與正則表達(dá)式的子表達(dá)式匹配的文本。除了這些常規(guī)的數(shù)組元素之外,返回的數(shù)組還含有兩個(gè)對(duì)象屬性。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對(duì) stringObject 的引用。
var r='aaa123456'.match(/\d/);
如果 regexp 具有標(biāo)志 g,則 match() 方法將執(zhí)行全局檢索,找到 strObj 中的所有匹配子字符串。若沒有找到任何匹配的子串,則返回 null。如果找到了一個(gè)或多個(gè)匹配子串,則返回一個(gè)數(shù)組。不過全局匹配返回的數(shù)組的內(nèi)容與前者大不相同,它的數(shù)組元素中存放的是 strObj 中所有的匹配子串,而且也沒有 index 屬性或 input 屬性。
var r='aaa123456'.match(/\d/g);
strObj.replace(regObj,replaceStr)
關(guān)于strng對(duì)象的replace方法,我們最常用的時(shí)傳入兩個(gè)字符串的做法,但這種做法有個(gè)缺陷,只能replace一次
'abcabcabc'.replace('bc','X'); //aXabcabc
replace方法的第一個(gè)參數(shù)還可以傳入RegExp對(duì)象,傳入正則表達(dá)式可以時(shí)replace方法更加強(qiáng)大靈活
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX'abcaBcabC'.replace(/bc/gi,'X'); //aXaXaX
如果replace方法的第一個(gè)參數(shù)傳入的是帶分組的正則表達(dá)式,我們?cè)诘诙€(gè)參數(shù)中可以使用$1...$9來獲取相應(yīng)分組內(nèi)容,比如希望把字符串 1<%2%>34<%567%>89 的<%x%>換為$#x#$,我們可以這樣
'1<%2%>34<%567%>89'.replace(/<%(\d+)%>/g,'@#$1#@');//1@#2#@34@#567#@89
當(dāng)然還有很多方式可以達(dá)到這一目的,這里只是演示一下利用分組內(nèi)容,我們?cè)诘诙€(gè)參數(shù)中使用 @#$1#@,其中$1表示被捕獲的分組內(nèi)容,在一些js模板函數(shù)中可以經(jīng)常見到這種方式替換字符串。
strObj.replace(regObj,function(){})
可以通過修改replace方法的第二個(gè)參數(shù),使replace更加強(qiáng)大,在前面的介紹中,只能把所有匹配替換為固定內(nèi)容,但如果我希望把一個(gè)字符串中所有數(shù)字,都用小括號(hào)包起來該怎么弄
'2398rufdjg9w45hgiuerhg83ghvif'.replace(/\d+/g,function(r){ return '('+r+')';}); //"(2398)rufdjg(9)w(45)hgiuerhg(83)ghvif"
把replace方法的第二個(gè)參數(shù)傳入一個(gè)function,這個(gè)function會(huì)在每次匹配替換的時(shí)候調(diào)用,算是個(gè)每次替換的回調(diào)函數(shù),我們使用了回調(diào)函數(shù)的第一個(gè)參數(shù),也就是匹配內(nèi)容,其實(shí)回調(diào)函數(shù)一共有四個(gè)參數(shù)
1.第一個(gè)參數(shù)很簡(jiǎn)單,是匹配字符串
2.第二個(gè)參數(shù)是正則表達(dá)式分組內(nèi)容,沒有分組則沒有該參數(shù)
3.第三個(gè)參數(shù)是匹配項(xiàng)在字符串中的index
4.第四個(gè)參數(shù)則是原字符串
'2398rufdjg9w45hgiuerhg83ghvif'.replace(/\d+/g,function(a,b,c){ console.log(a+'\t'+b+'\t'+c); return '('+a+')';}); 2398 0 2398rufdjg9w45hgiuerhg83ghvif9 10 2398rufdjg9w45hgiuerhg83ghvif45 12 2398rufdjg9w45hgiuerhg83ghvif83 22 2398rufdjg9w45hgiuerhg83ghvif
這是沒有分組的情況,打印出來的分別是 匹配內(nèi)容、匹配項(xiàng)index和原字符串,看個(gè)有分組的例子,如果我們希望把一個(gè)字符串的<%%>外殼去掉,<%1%><%2%><%3%> 變成123
根據(jù)這種參數(shù)replace可以實(shí)現(xiàn)很多強(qiáng)大的功能,尤其是在復(fù)雜的字符串替換語句中經(jīng)常使用。
strObj.split(regObj)
我們經(jīng)常使用split方法把字符串分割為字符數(shù)組
和replace方法類似,在一些復(fù)雜的分割情況下我們可以使用正則表達(dá)式解決
這樣就可以按照數(shù)字分割字符串了,是不是很強(qiáng)大。看完這兩篇博客基本就能對(duì)平時(shí)用到的JavaScript正則表達(dá)式游刃有余了。要求在前端把一個(gè)div中的英文段落單詞首字母都換成大寫,你是不是知道該怎么做了?
- js正則表達(dá)式學(xué)習(xí)和總結(jié)(必看篇)
- js正則表達(dá)式驗(yàn)證URL函數(shù)代碼(方便多個(gè)正則對(duì)比)
- js匹配網(wǎng)址url的正則表達(dá)式集合
- js正則表達(dá)式注冊(cè)頁面表單驗(yàn)證
- Javascript校驗(yàn)密碼復(fù)雜度的正則表達(dá)式
- JS正則表達(dá)式匹配檢測(cè)各種數(shù)值類型(數(shù)字驗(yàn)證)
- JavaScript中一些常用的正則表達(dá)式(推薦)
- JS使用正則表達(dá)式過濾多個(gè)詞語并替換為相同長(zhǎng)度星號(hào)的方法
- js利用正則表達(dá)式檢驗(yàn)輸入內(nèi)容是否為網(wǎng)址
- JS去除空格和換行的正則表達(dá)式(推薦)
- JavaScript正則表達(dá)式上之基本語法(推薦)
- JavaScript 中的正則表達(dá)式(推薦)
- 利用js正則表達(dá)式校驗(yàn)正數(shù)、負(fù)數(shù)、和小數(shù)
相關(guān)文章
ExtJS4的文本框(textField)使用正則表達(dá)式進(jìn)行驗(yàn)證(Regex)的方法
Extjs的Regex的驗(yàn)證屬性分兩種情況,一種是只有紅色提示框;另一種是在提示框邊會(huì)出現(xiàn)一個(gè)類似批注的提示信息,不過在頁面加載時(shí)要加上Ext.QuickTips.init();提示框才能正常顯示出來2016-02-02js正則表達(dá)式中的單行模式與多行模式實(shí)例分析
這篇文章主要介紹了js正則表達(dá)式中的單行模式與多行模式,實(shí)例分析了js正則表達(dá)式中實(shí)現(xiàn)單行模式與多行模式的技巧,需要的朋友可以參考下2015-01-018個(gè)你應(yīng)該了解的正則表達(dá)式提高你的工作效率
正則表達(dá)式也可以被當(dāng)作是一門語言,入門時(shí)可能很吃力,不過一旦學(xué)會(huì)了就方便很多,在處理一些比較復(fù)雜的替換時(shí),正則表達(dá)式就會(huì)發(fā)揮它的真正作用,本文整理了一些常用的正則,感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-01-01java 正則表達(dá)式基礎(chǔ),實(shí)例學(xué)習(xí)資料收集大全
本站長(zhǎng)期收集的java正則表達(dá)式學(xué)習(xí)資料,包括javascript,vbscript,asp,php,asp.net等正則表達(dá)式學(xué)習(xí)資料2007-12-12python 正則表達(dá)式學(xué)習(xí)小結(jié)
這篇文章主要介紹了python 正則表達(dá)式學(xué)習(xí)小結(jié)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06使用正則表達(dá)式生成隨機(jī)數(shù)據(jù)的方法
這篇文章主要介紹了使用正則表達(dá)式生成隨機(jī)數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02javascript正則表達(dá)式處理中文和中文標(biāo)點(diǎn)符號(hào)的過程
在寫項(xiàng)目時(shí)遇到需要匹配字符串中所有的漢字并且包括簡(jiǎn)單的中文標(biāo)點(diǎn)符號(hào),下面這篇文章主要給大家介紹了關(guān)于javascript正則表達(dá)式處理中文和中文標(biāo)點(diǎn)符號(hào)的相關(guān)資料,需要的朋友可以參考下2024-02-02JavaScript正則方法replace實(shí)現(xiàn)搜索關(guān)鍵字高亮顯示
這里介紹的是JavaScript的正則表達(dá)式的replace方法 ,和實(shí)現(xiàn)搜索關(guān)鍵字高亮的功能.先介紹一下正則表達(dá)式的replace方法,具體內(nèi)容詳情大家參考下本文2017-09-09淺析一個(gè)匹配數(shù)字和字母密碼的正則表達(dá)式
最近做項(xiàng)目,遇到這樣的需求,要求由數(shù)字和字母組成,并且要同時(shí)含有數(shù)字和字母,且長(zhǎng)度要在8-16位之間。下面給大家分享實(shí)現(xiàn)代碼,要求看看吧2017-06-06