match 方法 使用正則表達(dá)式模式對(duì)字符串執(zhí)行查找,并將包含查找的結(jié)果作為數(shù)組返回。 stringObj.match(rgExp) 參數(shù) stringObj 必選項(xiàng)。對(duì)其進(jìn)行查找的 String 對(duì)象或字符串文字。 rgExp 必選項(xiàng)。為包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對(duì)象。也可以是包含正則表達(dá)式模式和可用標(biāo)志的變量名或字符串文字。 其余說(shuō)明與exec一樣,不同的是如果match的表達(dá)式匹配了全局標(biāo)記g將出現(xiàn)所有匹配項(xiàng),而不用循環(huán),但所有匹配中不會(huì)包含子匹配項(xiàng)。 例子1: function MatchDemo(){ var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain"; re = /(a)in/ig; // 創(chuàng)建正則表達(dá)式模式。 r = s.match(re); // 嘗試去匹配搜索字符串。 document.write(r); // 返回的數(shù)組包含了所有 "ain" 出現(xiàn)的四個(gè)匹配,r[0]、r[1]、r[2]、r[3]。 // 但沒(méi)有子匹配項(xiàng)a。}輸出結(jié)果:ain,ain,ain,ain exec 方法 用正則表達(dá)式模式在字符串中查找,并返回該查找結(jié)果的第一個(gè)值(數(shù)組),如果匹配失敗,返回null。 rgExp.exec(str) 參數(shù) rgExp 必選項(xiàng)。包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對(duì)象。 str 必選項(xiàng)。要在其中執(zhí)行查找的 String 對(duì)象或字符串文字。 返回?cái)?shù)組包含: input:整個(gè)被查找的字符串的值; index:匹配結(jié)果所在的位置(位); lastInput:下一次匹配結(jié)果的位置; arr:結(jié)果值,arr[0]全匹配結(jié)果,arr[1,2...]為表達(dá)式內(nèi)()的子匹配,由左至右為1,2...。 例子2: 復(fù)制代碼代碼如下: function RegExpTest(){ var src="http://sumsung753.blog.163.com/blog/I love you!"; var re = /\w+/g; // 注意g將全文匹配,不加將永遠(yuǎn)只返回第一個(gè)匹配。 var arr; while((arr = re.exec(src)) !=null){ //exec使arr返回匹配的第一個(gè),while循環(huán)一次將使re在g作用尋找下一個(gè)匹配。 document.write(arr.index + "-" + arr.lastIndex + ":" + arr + "<br/>"); for(key in arr){ document.write(key + "=>" + arr[key] + "<br/>"); } document.write("<br/>"); } } window.onload = RegExpTest(); 輸出結(jié)果: 0-1:I //0為index,i所在位置,1為下一個(gè)匹配所在位置 input=>I love you! index=>0 lastIndex=>1 0=>I 2-6:love input=>I love you! index=>2 lastIndex=>6 0=>love 7-10:you input=>I love you! index=>7 lastIndex=>10 0=>you 說(shuō)明:根據(jù)手冊(cè),exec只返回匹配結(jié)果的第一個(gè)值,比如上例如果不用while循環(huán),將只返回'I'(盡管i空格后的love和you都符合表達(dá)式),無(wú)論re表達(dá)式用不用全局標(biāo)記g。但是如果為正則表達(dá)式設(shè)置了全局標(biāo)記g,exec 從以 lastIndex 的值指示的位置開(kāi)始查找。如果沒(méi)有設(shè)置全局標(biāo)志,exec 忽略 lastIndex 的值,從字符串的起始位置開(kāi)始搜索。利用這個(gè)特點(diǎn)可以反復(fù)調(diào)用exec遍歷所有匹配,等價(jià)于match具有g(shù)標(biāo)志。 當(dāng)然,如果正則表達(dá)式忘記用g,而又用循環(huán)(比如:while、for等),exec將每次都循環(huán)第一個(gè),造成死循環(huán)。 exec的輸出將包含子匹配項(xiàng)。 例子3: 復(fù)制代碼代碼如下: function execDemo(){ var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain"; re = /[\w]*(ai)n/ig; r = re.exec(s); document.write(r + "<br/>"); for(key in r){ document.write(key + "-" + r[key] + "<br/>"); } } window.onload = execDemo(); 輸出: rain,ai input-The rain in Spain falls mainly in the plain index-4 lastIndex-8 0-rain 1-ai test 方法 返回一個(gè) Boolean 值,它指出在被查找的字符串中是否匹配給出的正則表達(dá)式。 rgexp.test(str) 參數(shù) rgexp 必選項(xiàng)。包含正則表達(dá)式模式或可用標(biāo)志的正則表達(dá)式對(duì)象。 str 必選項(xiàng)。要在其上測(cè)試查找的字符串。 說(shuō)明 test 方法檢查字符串是否與給出的正則表達(dá)式模式相匹配,如果是則返回 true,否則就返回 false。 例子4: 復(fù)制代碼代碼如下: function TestDemo(re, s){ var s1; if (re.test(s)) s1 = " 匹配正則式 "; else s1 = " 不匹配正則式 "; return("'" + s + "'" + s1 + "'"+ re.source + "'"); } window.onload = document.write(TestDemo(/ab/,'cdef')); 輸出結(jié)果:'cdef' 不匹配正則式 'ab' 注意:test()繼承正則表達(dá)式的lastIndex屬性,表達(dá)式在匹配全局標(biāo)志g的時(shí)候須注意。 例子5: 復(fù)制代碼代碼如下: function testDemo(){ var r, re; // 聲明變量。 var s = "I"; re = /I/ig; // 創(chuàng)建正則表達(dá)式模式。 document.write(re.test(s) + "<br/>"); // 返回 Boolean 結(jié)果。 document.write(re.test(s) + "<br/>"); document.write(re.test(s)); } testDemo(); 輸出結(jié)果: true false true 當(dāng)?shù)诙握{(diào)用test()的時(shí)候,lastIndex指向下一次匹配所在位置1,所以第二次匹配不成功,lastIndex重新指向0,等于第三次又重新匹配。下例顯示test的lastIndex屬性: 例子6: 復(fù)制代碼代碼如下: function testDemo(){ var r, re; // 聲明變量。 var s = "I"; re = /I/ig; // 創(chuàng)建正則表達(dá)式模式。 document.write(re.test(s) + "<br/>"); // 返回 Boolean 結(jié)果。 document.write(re.lastIndex); // 返回 Boolean 結(jié)果。 } testDemo(); 輸出: true 1 解決方法:將test()的lastIndex屬性每次重新指向0,re.lastIndex = 0; search 方法 返回與正則表達(dá)式查找內(nèi)容匹配的第一個(gè)子字符串的位置(偏移位)。 stringObj.search(rgExp) 參數(shù) stringObj 必選項(xiàng)。要在其上進(jìn)行查找的 String 對(duì)象或字符串文字。 rgExp 必選項(xiàng)。包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對(duì)象。 說(shuō)明:如果找到則返回子字符至開(kāi)始處的偏移位,否則返回-1。 例子6: 復(fù)制代碼代碼如下: function SearchDemo(){ var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain."; re = /falls/i; // 創(chuàng)建正則表達(dá)式模式。 re2 = /tom/i; r = s.search(re); // 查找字符串。 r2 = s.search(re2); return("r:" + r + ";r2:" + r2); // 返回 Boolean 結(jié)果。 } document.write(SearchDemo()); 輸出:r:18;r2:-1 replace 方法 返回根據(jù)正則表達(dá)式進(jìn)行文字替換后的字符串的復(fù)制。 stringObj.replace(rgExp, replaceText) 參數(shù) stringObj 必選項(xiàng)。要執(zhí)行該替換的 String 對(duì)象或字符串文字。該字符串不會(huì)被 replace 方法修改。 rgExp 必選項(xiàng)。為包含正則表達(dá)式模式或可用標(biāo)志的正則表達(dá)式對(duì)象。也可以是 String 對(duì)象或文字。如果 rgExp 不是正則表達(dá)式對(duì)象,它將被轉(zhuǎn)換為字符串,并進(jìn)行精確的查找;不要嘗試將字符串轉(zhuǎn)化為正則表達(dá)式。 replaceText 必選項(xiàng)。是一個(gè)String 對(duì)象或字符串文字,對(duì)于stringObj 中每個(gè)匹配 rgExp 中的位置都用該對(duì)象所包含的文字加以替換。在 Jscript 5.5 或更新版本中,replaceText 參數(shù)也可以是返回替換文本的函數(shù)。 說(shuō)明 replace 方法的結(jié)果是一個(gè)完成了指定替換的 stringObj 對(duì)象的復(fù)制。意思為匹配的項(xiàng)進(jìn)行指定替換,其它不變作為StringObj的原樣返回。 ECMAScript v3 規(guī)定,replace() 方法的參數(shù) replacement 可以是函數(shù)而不是字符串。在這種情況下,每個(gè)匹配都調(diào)用該函數(shù),它返回的字符串將作為替換文本使用。該函數(shù)的第一個(gè)參數(shù)是匹配模式的字符串。接下來(lái)的參數(shù)是與模式中的子表達(dá)式匹配的字符串,可以有 0 個(gè)或多個(gè)這樣的參數(shù)。接下來(lái)的參數(shù)是一個(gè)整數(shù),聲明了匹配在 stringObject 中出現(xiàn)的位置。最后一個(gè)參數(shù)是 stringObject 本身。結(jié)果為將每一匹配的子字符串替換為函數(shù)調(diào)用的相應(yīng)返回值的字符串值。函數(shù)作參可以進(jìn)行更為復(fù)雜的操作。 例子7: 復(fù)制代碼代碼如下: function f2c(s) { var test = /(\d+(\.\d*)?)F\b/g; // 說(shuō)明華氏溫度可能模式有:123F或123.4F。注意,這里用了g模式 return(s.replace (test, function(Regstr,$1,$2,$3,newstrObj) { return(("<br/>" + Regstr +"<br/>" + ($1-32) * 1/2) + "C" +"<br/>" + //以下兩行進(jìn)行替換 $2 +"<br/>" + $3 +"<br/>" + newstrObj +"<br/>" ); } ) ); } document.write(f2c("Water: 32.2F and Oil: 20.30F.")); 輸出結(jié)果: Water: //不與正則匹配的字符,按原字符輸出 32.2F //與正則相匹配的第一個(gè)字符串的原字符串 Regstr 0.10000000000000142C //與正則相匹配的第一個(gè)字符串的第一個(gè)子模式匹配的替換結(jié)果 $1 .2 //與正則相匹配的第一個(gè)字符串的第二個(gè)子模式匹配項(xiàng)的替換結(jié)果,這里我們沒(méi)有將它替換 $2 7 //與正則相匹配的第一個(gè)字符串的第一個(gè)子匹配出現(xiàn)的偏移量 $3 Water: 32.2F and Oil: 20.30F. //原字符串 newstrObj and Oil: //不與正則匹配的字符 20.30F //與正則相匹配的第二個(gè)字符串的原字符串 -5.85C //與正則相匹配的第二個(gè)字符串的第一個(gè)子模式與匹配的替換結(jié)果 .30 //與正則相匹配的第二個(gè)字符串的第二個(gè)子模式匹配項(xiàng)的替換結(jié)果,這里我們沒(méi)有將它替換 22 //與正則相匹配的第二個(gè)字符串的第一個(gè)子匹配出現(xiàn)的偏移量 Water: 32.2F and Oil: 20.30F. //原字符串 . //不與正則匹配的字符 上面的函數(shù)參數(shù)我們?nèi)坑玫搅?。在?shí)際中,我們只須用將xxF替換為xxC,根據(jù)要求,我們無(wú)須寫(xiě)這么多參數(shù)。 例子8: 復(fù)制代碼代碼如下: function f2c(s) { var test = /(\d+(\.\d*)?)F\b/g; // 說(shuō)明華氏溫度可能模式有:123F或123.4F return(s.replace (test, function(strObj,$1) { return((($1-32) * 1/2) + "C"); } ) ); } document.write(f2c("Water: 32.2F and Oil: 20.30F.")); 輸出:Water: 0.10000000000000142C and Oil: -5.85C. 更多的應(yīng)用: 例子9: 復(fù)制代碼代碼如下: function f2c(s) { var test = /([\d]{4})-([\d]{1,2})-([\d]{1,2})/; return(s.replace (test, function($0,$1,$2,$3) { return($2 +"/" + $1); } ) ); } document.write(f2c("today: 2011-03-29")); 輸出:today: 03/2011 split 方法 將一個(gè)字符串分割為子字符串,然后將結(jié)果作為字符串?dāng)?shù)組返回。 stringObj.split([separator[, limit]]) 參數(shù) stringObj 必選項(xiàng)。要被分解的 String 對(duì)象或文字。該對(duì)象不會(huì)被 split 方法修改。 separator 可選項(xiàng)。字符串或 正則表達(dá)式 對(duì)象,它標(biāo)識(shí)了分隔字符串時(shí)使用的是一個(gè)還是多個(gè)字符。如果忽略該選項(xiàng),返回包含整個(gè)字符串的單一元素?cái)?shù)組。 limit 可選項(xiàng)。該值用來(lái)限制返回?cái)?shù)組中的元素個(gè)數(shù)。 說(shuō)明 split 方法的結(jié)果是一個(gè)字符串?dāng)?shù)組,在 stingObj 中每個(gè)出現(xiàn) separator 的位置都要進(jìn)行分解。separator 不作為任何數(shù)組元素的部分返回。 例子10: 復(fù)制代碼代碼如下: function SplitDemo(){ var s, ss; var s = "The rain in Spain falls mainly in the plain."; // 正則表達(dá)式,用不分大不寫(xiě)的s進(jìn)行分隔。 ss = s.split(/s/i); return(ss); } document.write(SplitDemo()); 輸出:The rain in ,pain fall, mainly in the plain. js正則表達(dá)式之exec()方法、match()方法以及search()方法 先看代碼: var sToMatch = "test, Tes, tst, tset, Test, Tesyt, sTes"; 三個(gè)彈出框內(nèi)容如下: 結(jié)果分析如下: 1、RegExp的exec()方法,有一個(gè)字符串參數(shù),返回一個(gè)數(shù)組,數(shù)組的第一個(gè)條目是第一個(gè)匹配;其他的是反向引用。所以第一個(gè)返回的結(jié)果是第一個(gè)匹配的值es(不區(qū)分大小寫(xiě))。 2、String對(duì)象有一個(gè)match()方法,它返回一個(gè)包含在字符串中所有匹配的數(shù)據(jù)。這個(gè)方法調(diào)用string對(duì)象,同時(shí)傳給它一個(gè)RegExp對(duì)象。所以第二個(gè)彈出語(yǔ)句返回的是所有符合正則表達(dá)式的數(shù)組。 3、search()的字符串方法與indexOf()有些類似,但是它使用一個(gè)RegExp對(duì)象而非僅僅一個(gè)子字符串。search()方法返回第一個(gè)匹配值的位置。所以第三處彈出的是“1”,即第二個(gè)字符就匹配了。注意的是search()方法不支持全局匹配正規(guī)表達(dá)式(帶參數(shù)g)。 |
|
來(lái)自: 悟靜 > 《JavaScript》