js正則函數 match、exec、test、search、replace、split 使用介紹集合

倘若本站有幫助到您,請不吝於給一個讚鼓勵!

 

3、search()的字元串方法與indexOf()有些類似,可是它使用一個RegExp對象而非僅僅一個子字元串。search()方法重回第一個匹配值的任务。所以第三處彈出的是「1」,即第二個字元就同盟了。注意的是search()方法不帮忙全局匹配正規表達式(帶參數g)。

 

 

輸出結果: 
沃特er: //不與正則匹配的字元,按原字元輸出 
32.2F //與正則相匹配的第一個字元串的原字元串 Regstr 
0.10000000000000142C
//與正則相匹配的第一個字元串的首先個子格局匹配的替換結果 $1 
.2
//與正則相匹配的首先個字元串的第二個子方式匹配項的替換結果,這裡我們沒有將它替換
$2 
7 //與正則相匹配的率先個字元串的率先個子匹配出現的偏移量 $3 
沃·特(W·at)er: 32.2F and Oil: 20.30F. //原字元串 newstrObj 
and Oil: //不與正則匹配的字元 
20.30F //與正則相匹配的第二個字元串的原字元串 
-5.85C //與正則相匹配的第二個字元串的第一個子方式與匹配的替換結果 
.30
//與正則相匹配的第二個字元串的第二個子形式匹配項的替換結果,這裡我們沒有將它替換 
22 //與正則相匹配的第二個字元串的率先個子匹配出現的偏移量 
沃·特(W·at)er: 32.2F and Oil: 20.30F. //原字元串 
. //不與正則匹配的字元 
上面的函數參數我們全部用到了。在實際中,我們只須用將xxF替換為xxC,根據须求,我們無須寫這麼多參數。 
例子8: 

图片 1

三個彈出框內容如下:

 

图片 2

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')); 

輸出結果:’cdef’ 不匹配正則式 ‘ab’ 
留意:test()繼承正則表達式的lastIndex屬性,表達式在协作全局標誌g的時候須注意。 
例子5: 

function testDemo(){ 
var r, re; // 聲明變數。 
var s = "I"; 
re = /I/ig; // 創建正則表達式模式。 
document.write(re.test(s) + "<br/>"); // 返回 Boolean 結果。 
document.write(re.test(s) + "<br/>"); 
document.write(re.test(s)); 
} 
testDemo(); 

 

function f2c(s) { 
var test = /(\d+(\.\d*)?)F\b/g; // 說明華氏溫度可能模式有: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. 
越多的應用: 
例子9: 

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")); 

1、RegExp的exec()方法,有一個字元串參數,重返一個數組,數組的率先個條目是率先個匹配;其余的是反向引用。所以首先個再次回到的結果是首先個匹配的值es(不區分大小寫)。

 

輸出:The rain in ,pain fall, mainly in the plain. 

split
方法 

將一個字元串分割為子字元串,然後將結果作為字元串數組重回。 
stringObj.split([separator[, limit]]) 
參數 
stringObj 
必選項。要被分解的 String 對象或文字。該對象不會被 split 方法修改。 
separator 
可選項。字元串或 正則表達式
對象,它標識了分隔字元串時使用的是一個還是多個字元。若是忽视該選項,再次来到包罗整個字元串的單一元素數組。 
limit 
可選項。該值用來限制重回數組中的元素個數。 
說明 
split 方法的結果是一個字元串數組,在 stingObj 中每個出現 separator
的职位都要進行分解。separator 不作為任何數組元素的有些再次回到。 
例子10: 

輸出:r:18;r2:-1 

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(); 

search 方法 
归来與正則表達式查找內容匹配的第一個子字元串的岗位(偏移位)。 
stringObj.search(rgExp) 
參數 
stringObj 
必選項。要在其上進行查找的 String 對象或字元串文字。 
rgExp 
必選項。包涵正則表達式方式和可用標誌的正則表達式對象。 
說明:如果找到則再次回到子字元至開始處的偏移位,否則再次来到-1。 
例子6: 

 

match 方法 
应用正則表達式方式對字元串執行查找,並將包罗查找的結果作為數組重返。 
stringObj.match(rgExp) 
參數 
stringObj 
必選項。對其進行查找的 String 對象或字元串文字。 
rgExp 
必選項。為包罗正則表達式形式和可用標誌的正則表達式對象。也足以是含有正則表達式方式和可用標誌的變數名或字元串文字。 
其餘說明與exec一樣,分化的是只要match的表達式匹配了全局標記g將出現所有匹配項,而不用循環,但拥有匹配中不會蕴含子匹配項。 
例子1: 
function MatchDemo(){ var r, re; // 聲明變數。 var s = “The rain in
Spain falls mainly in the plain”; re = /(a)in/ig; //
創建正則表達式情势。 r = s.match(re); // 嘗試去匹配搜索字元串。
document.write(r); // 重返的數組包括了颇具 “ain”
出現的四個匹配,r[0]、r[1]、r[2]、r[3]。 //
但沒有子匹配項a。}輸出結果:ain,ain,ain,ain 

alert(sToMatch.match(reEs));

var reEs = /es/gi;

輸出結果: 
0-1:I //0為index,i所在地方,1為下一個合营所在地点 
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 
說明:根據手冊,exec只回去匹配結果的率先個值,比如上例借使不用while循環,將只回去’I’(儘管i空格後的love和you都严丝合缝表達式),無論re表達式用不用全局標記g。不过如果為正則表達式設置了全局標記g,exec
從以 lastIndex 的值提醒的职分開始查找。假使沒有設置全局標誌,exec 忽略
lastIndex
的值,從字元串的原初地方開始搜索。利用這個特點可以反覆調用exec遍歷所有匹配,等價於match具有g標誌。 
當然,若是正則表達式忘記用g,而又用循環(比如:while、for等),exec將每回都循環第一個,造成死循環。 
exec的輸出將包罗子匹配項。 
例子3: 

輸出: 
rain,ai 
input-The rain in Spain falls mainly in the plain 
index-4 
lastIndex-8 
0-rain 
1-ai 

輸出:today: 03/2011 

alert(sToMatch.search(reEs));

alert(reEs.exec(sToMatch));

replace
方法 

回到根據正則表達式進行文字替換後的字元串的複製。 
stringObj.replace(rgExp, replaceText) 
參數 
stringObj 
必選項。要執行該替換的 String 對象或字元串文字。該字元串不會被 replace
方法修改。
rgExp 
必選項。為蕴含正則表達式形式或可用標誌的正則表達式對象。也可以是 String
對象或文字。假设 rgExp
不是正則表達式對象,它將被轉換為字元串,並進行精確的物色;不要嘗試將字元串轉化為正則表達式。 
replaceText 
必選項。是一個String 對象或字元串文字,對於stringObj 中每個匹配 rgExp
中的地点都用該對象所包罗的文字加以替換。在 Jscript 5.5
或更新版本中,replaceText 參數也得以是回到替換文本的函數。 
說明 
replace 方法的結果是一個做到了指定替換的 stringObj
對象的複製。意思為匹配的項進行指定替換,其余不變作為StringObj的原樣再次回到。 
ECMAScript v3 規定,replace() 方法的參數 replacement
可以是函數而不是字元串。在這種情況下,每個匹配都調用該函數,它回到的字元串將作為替換文本使用。該函數的第一個參數是优秀格局的字元串。接下來的參數是與方式中的子表達式匹配的字元串,可以有
0 個或多個這樣的參數。接下來的參數是一個整數,聲明了协作在 stringObject
中出現的职责。最後一個參數是 stringObject
本身。結果為將每一匹配的子字元串替換為函數調用的相應再次来到值的字元串值。函數作參可以進行更為複雜的操作。 
例子7: 

結果分析如下:

test
方法 

归来一個 Boolean
值,它提出在被搜寻的字元串中是否匹配給出的正則表達式。 
rgexp.test(str) 
參數 
rgexp 
必選項。包含正則表達式格局或可用標誌的正則表達式對象。 
str 
必選項。要在其上測試查找的字元串。 
說明 
test 方法檢查字元串是不是與給出的正則表達式情势相匹配,假如是則再次来到true,否則就回去 false。 
例子4: 

 

2、String對象有一個match()方法,它回到一個蕴涵在字元串中颇具匹配的數據。這個方法調用string對象,同時傳給它一個RegExp對象。所以第二個彈出語句再次来到的是所有符合正則表達式的數組。

function f2c(s) { 
var test = /(\d+(\.\d*)?)F\b/g; // 說明華氏溫度可能模式有:123F或123.4F。注意,這裡用了g模式 
return(s.replace 
(test, 
function(Regstr,$1,$2,$3,newstrObj) { 
return(("<br/>" + Regstr +"<br/>" + ($1-32) * 1/2) + "C" +"<br/>" + //以下兩行進行替換 
$2 +"<br/>" + $3 +"<br/>" + newstrObj +"<br/>" ); 
} 
) 
); 
} 
document.write(f2c("Water: 32.2F and Oil: 20.30F.")); 

輸出: 
true 

解決方法:將test()的lastIndex屬性每一回重复指向0,re.lastIndex = 0; 

 

function SplitDemo(){ 
var s, ss; 
var s = "The rain in Spain falls mainly in the plain."; 
// 正則表達式,用不分大不寫的s進行分隔。 
ss = s.split(/s/i); 
return(ss); 
} 
document.write(SplitDemo()); 
function SearchDemo(){ 
var r, re; // 聲明變數。 
var s = "The rain in Spain falls mainly in the plain."; 
re = /falls/i; // 創建正則表達式模式。 
re2 = /tom/i; 
r = s.search(re); // 查找字元串。 
r2 = s.search(re2); 
return("r:" + r + ";r2:" + r2); // 返回 Boolean 結果。 
} 
document.write(SearchDemo()); 

var sToMatch = “test, Tes, tst, tset, Test, Tesyt, sTes”;

js正則表達式之exec()方法、match()方法以及search()方法 

先看代碼:

 

exec 方法 
用正則表達式形式在字元串中找寻,並重回該查找結果的第一個值(數組),要是匹配失敗,重返null。 
rgExp.exec(str) 
參數 
rgExp 
必選項。包涵正則表達式格局和可用標誌的正則表達式對象。 
str 
必選項。要在里边執行查找的 String 對象或字元串文字。 
重回數組包蕴: 
input:整個被寻找的字元串的值; 
index:匹配結果所在的任务(位); 
lastInput:下四次匹配結果的地方; 
arr:結果值,arr[0]全匹配結果,arr[1,2…]為表達式內()的子匹配,由左至右為1,2…。 
例子2: 

function testDemo(){ 
var r, re; // 聲明變數。 
var s = "I"; 
re = /I/ig; // 創建正則表達式模式。 
document.write(re.test(s) + "<br/>"); // 返回 Boolean 結果。 
document.write(re.lastIndex); // 返回 Boolean 結果。 
} 
testDemo(); 
function RegExpTest(){ 
var src="http://sumsung753.blog.163.com/blog/I love you!"; 
var re = /\w+/g; // 注意g將全文匹配,不加將永遠只返回第一個匹配。 
var arr; 
while((arr = re.exec(src)) !=null){ //exec使arr返回匹配的第一個,while循環一次將使re在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(); 

輸出結果: 
true 
false 
true 
當第二次調用test()的時候,lastIndex指向下一遍匹配所在地点1,所以第二次匹配不成功,lastIndex重新指向0,等於第五次又再次匹配。下例顯示test的lastIndex屬性: 
例子6: 

图片 3