用正則表達(dá)式模式在字符串中查找,并返回該查找結(jié)果的第一個值(數(shù)組),如果匹配失敗,返回null。
rgExp.exec(str)
參數(shù)
rgExp
必選項。包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對象。
str
必選項。要在其中執(zhí)行查找的 String 對象或字符串文字。
返回數(shù)組包含:
input:整個被查找的字符串的值;
index:匹配結(jié)果所在的位置(位);
arr:結(jié)果值,arr[0]全匹配結(jié)果,arr[1,2...]為表達(dá)式內(nèi)()的子匹配,由左至右為1,2...。
注意:在匹配后,rgExp 的 lastIndex 屬性被設(shè)置為匹配文本的最后一個字符的下一個位置。lastIndex并不在返回對象的屬性中,而是正則表達(dá)式對象的屬性。
例子1:不含子表達(dá)式的正則表達(dá)式exec方法循環(huán)應(yīng)用
!function RegExpTest(){ var src="http://sumsung753.blog.163.com/blog/I love you!"; // 注意g將全文匹配,不加將永遠(yuǎn)只返回第一個匹配。 var re = /\w+/g; var arr; // exec使arr返回匹配的第一個,while循環(huán)一次將使re在g作用尋找下一個匹配。 while((arr = re.exec(src)) !=null){ document.write(arr.index + "-" + re.lastIndex + ":" + arr + "<br/>"); for(key in arr){ document.write(key + "=>" + arr[key] + "<br/>"); } document.write("<br/>"); } }()
輸出結(jié)果:
0-4:http0=>httpindex=>0input=>http://sumsung753.blog.163.com/blog/I love you!7-17:sumsung7530=>sumsung753index=>7input=>http://sumsung753.blog.163.com/blog/I love you!18-22:blog0=>blogindex=>18input=>http://sumsung753.blog.163.com/blog/I love you!23-26:1630=>163index=>23input=>http://sumsung753.blog.163.com/blog/I love you!27-30:com0=>comindex=>27input=>http://sumsung753.blog.163.com/blog/I love you!31-35:blog0=>blogindex=>31input=>http://sumsung753.blog.163.com/blog/I love you!36-37:I0=>Iindex=>36input=>http://sumsung753.blog.163.com/blog/I love you!38-42:love0=>loveindex=>38input=>http://sumsung753.blog.163.com/blog/I love you!43-46:you0=>youindex=>43input=>http://sumsung753.blog.163.com/blog/I love you!
exec默認(rèn)只返回匹配結(jié)果的第一個值,比如上例如果不用while循環(huán),將只返回'http'(盡管后面的sumsung753等都符合表達(dá)式),無論re表達(dá)式用不用全局標(biāo)記g。但是如果為正則表達(dá)式設(shè)置了全局標(biāo)記g,exec從上次匹配結(jié)束的位置開始查找。如果沒有設(shè)置全局標(biāo)志,exec依然從字符串的起始位置開始搜索。利用這個特點可以反復(fù)調(diào)用exec遍歷所有匹配,等價于match具有g(shù)標(biāo)志。當(dāng)然,如果正則表達(dá)式忘記用g,而又用循環(huán)(比如:while、for等),exec將每次都循環(huán)第一個,造成死循環(huán)。
如果正則表達(dá)式中包含子表達(dá)式,那么輸出結(jié)果將包含子匹配項
例子2:包含子表達(dá)式的正則表達(dá)式exec方法應(yīng)用
!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/>"); } }()
輸出結(jié)果如下:
rain,ai
0-rain
1-ai
index-4
input-The rain in Spain falls mainly in the plain
例子3:包含子表達(dá)式的正則表達(dá)式exec方法循環(huán)應(yīng)用
!function execDemo(){ var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain"; re = /[\w]*(ai)n/ig; while((r = re.exec(s))!=null){ document.write(r + "<br/>"); for(key in r){ document.write(key + "-" + r[key] + "<br/>"); } }}()
輸出結(jié)果:
rain,ai0-rain1-aiindex-4input-The rain in Spain falls mainly in the plainSpain,ai0-Spain1-aiindex-12input-The rain in Spain falls mainly in the plainmain,ai0-main1-aiindex-24input-The rain in Spain falls mainly in the plainplain,ai0-plain1-aiindex-38input-The rain in Spain falls mainly in the plain
使用正則表達(dá)式模式對字符串執(zhí)行查找,并將包含查找的結(jié)果作為數(shù)組返回。
stringObj.match(rgExp)
參數(shù)
stringObj
必選項。對其進(jìn)行查找的 String 對象或字符串文字。
rgExp
必選項。為包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對象。也可以是包含正則表達(dá)式模式和可用標(biāo)志的變量名或字符串文字。
其余說明與exec一樣,不同的是如果match的表達(dá)式匹配了全局標(biāo)記g將出現(xiàn)所有匹配項,而不用循環(huán),但所有匹配中不會包含子匹配項。
例子4:
!function MatchDemo(){ // 聲明變量。 var r, re; var s = "The rain in Spain falls mainly in the plain"; // 創(chuàng)建正則表達(dá)式模式。 re = /(a)in/ig; // 嘗試去匹配搜索字符串。 r = s.match(re); // 返回的數(shù)組包含了所有 "ain" 出現(xiàn)的四個匹配,r[0]、r[1]、r[2]、r[3]。 //但沒有子匹配項a。 document.write(r); }()
輸出結(jié)果:ain,ain,ain,ain
說明:
match() 方法將檢索字符串 stringObject,以找到一個或多個與 regexp 匹配的文本。這個方法的行為在很大程度上有賴于 regexp 是否具有標(biāo)志 g。
如果 regexp 沒有標(biāo)志 g,那么 match() 方法就只能在 stringObject 中執(zhí)行一次匹配。如果沒有找到任何匹配的文本, match() 將返回 null。否則,它將返回一個數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息。該數(shù)組的第 0 個元素存放的是匹配文本,而其余的元素存放的是與正則表達(dá)式的子表達(dá)式匹配的文本。除了這些常規(guī)的數(shù)組元素之外,返回的數(shù)組還含有兩個對象屬性。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對 stringObject 的引用。
如果 regexp 具有標(biāo)志 g,則 match() 方法將執(zhí)行全局檢索,找到 stringObject 中的所有匹配子字符串。若沒有找到任何匹配的子串,則返回 null。如果找到了一個或多個匹配子串,則返回一個數(shù)組。不過全局匹配返回的數(shù)組的內(nèi)容與前者大不相同,它的數(shù)組元素中存放的是 stringObject 中所有的匹配子串,而且也沒有 index 屬性或 input 屬性。
注意:在全局檢索模式下,match() 即不提供與子表達(dá)式匹配的文本的信息,也不聲明每個匹配子串的位置。如果您需要這些全局檢索的信息,可以使用 RegExp.exec()。
用于檢測一個字符串是否匹配某個模式
rgExp.test(str)
返回值
如果字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,否則返回 false。
說明
調(diào)用 RegExp 對象 r 的 test() 方法,并為它傳遞字符串 s,與這個表示式是等價的:(r.exec(s) != null)。
例子5:
var str = "hello world!";var result = /^hello/.test(str);console.log(result); // true
test()繼承正則表達(dá)式的lastIndex屬性,表達(dá)式在匹配全局標(biāo)志g的時候須注意。
例子6:
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()的時候,lastIndex指向下一次匹配所在位置1,所以第二次匹配不成功,lastIndex重新指向0,等于第三次又重新匹配。
例子7:
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); } testDemo();
輸出:
true
1
當(dāng)再次調(diào)用document.write(re.test(s) + "<br/>")時輸出false,原因就是從第2個字符開始搜索的。解決方法:將test()的lastIndex屬性每次重新指向0,re.lastIndex = 0;
用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串。
stringObject.search(regexp)
參數(shù)
regexp
該參數(shù)可以是需要在 stringObject 中檢索的子串,也可以是需要檢索的 RegExp 對象。如果要執(zhí)行忽略大小寫的檢索,請在正則表達(dá)式中添加標(biāo)志 i。
返回值
stringObject 中第一個與 regexp 相匹配的子串的起始位置。如果沒有找到任何匹配的子串,則返回 -1。
說明
search() 方法不執(zhí)行全局匹配,它將忽略標(biāo)志 g。它同時忽略 regexp 的 lastIndex 屬性,并且總是從字符串的開始進(jìn)行檢索,這意味著它總是返回 stringObject 的第一個匹配的位置。
例子8:
var str="Visit W3School!"document.write(str.search(/w3school/i))
用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達(dá)式匹配的子串。
stringObject.replace(regexp/substr, replacement)
參數(shù)
regexp/substr
必需。規(guī)定子字符串或要替換的模式的 RegExp 對象。
replacement
必需。替換文本或生成替換文本的函數(shù)。
返回值
replace 方法的結(jié)果是一個完成了指定替換的 stringObj 對象的復(fù)制。這個新的字符串對象,是用 replacement 替換了 regexp 的第一次匹配或所有匹配之后得到的。
說明
replace() 方法將在 stringObject 中查找與 regexp 相匹配的子字符串,然后用 replacement 來替換這些子串。如果 regexp 具有全局標(biāo)志 g,那么 replace() 方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。
replacement 可以是字符串,也可以是函數(shù)。如果它是字符串,那么每個匹配都將由字符串替換。但是 replacement 中的 $ 字符具有特定的含義。如下表所示,它說明從模式匹配得到的字符串將用于替換。
注意:ECMAScript v3 規(guī)定,replace() 方法的參數(shù) replacement 可以是函數(shù)而不是字符串。在這種情況下,每個匹配都調(diào)用該函數(shù),它返回的字符串將作為替換文本使用。該函數(shù)的第一個參數(shù)是匹配模式的字符串。接下來的參數(shù)是與模式中的子表達(dá)式匹配的字符串,可以有 0 個或多個這樣的參數(shù)。接下來的參數(shù)是一個整數(shù),聲明了匹配在 stringObject 中出現(xiàn)的位置。最后一個參數(shù)是 stringObject 本身。
例子9:將所有單詞首字母大寫
name = 'aaa bbb ccc';uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);});
例子10:將Doe, John替換為John, Doe
name = "Doe, John";name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
用于把一個字符串分割成字符串?dāng)?shù)組。
stringObject.split(separator,howmany)
參數(shù)
separator
必需。字符串或正則表達(dá)式,從該參數(shù)指定的地方分割 stringObject。
howmany
可選。該參數(shù)可指定返回的數(shù)組的最大長度。如果設(shè)置了該參數(shù),返回的子串不會多于這個參數(shù)指定的數(shù)組。如果沒有設(shè)置該參數(shù),整個字符串都會被分割,不考慮它的長度。
返回值
一個字符串?dāng)?shù)組。該數(shù)組是通過在 separator 指定的邊界處將字符串 stringObject 分割成子串創(chuàng)建的。返回的數(shù)組中的字串不包括separator 自身。
但是,如果 separator 是包含子表達(dá)式的正則表達(dá)式,那么返回的數(shù)組中包括與這些子表達(dá)式匹配的字串(但不包括與整個正則表達(dá)式匹配的文本)。
注意
如果把空字符串 ("") 用作 separator,那么 stringObject 中的每個字符之間都會被分割。
String.split() 執(zhí)行的操作與 Array.join 執(zhí)行的操作是相反的。
例子11:
var str="How are you doing today?"document.write(str.split(" ") + "<br />")document.write(str.split("") + "<br />")document.write(str.split(" ",3))
輸出
How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you
聯(lián)系客服