String對象支援四種利用Regex的方法,分別是search()、replace()、match()和split()。下面我們逐一進行講解。
search()檢索字串中指定的子字串,或檢索與Regex相匹配的子字串:
search()方法應該是這四個方法中最簡單的一個。其以Regex為參數,返回第一個與之匹配的子串的開始字元的位置,如果沒有任何匹配的子串,其返回-1。
//返回11,字串第一個字元位置為0
var str = 'Welcome to xiaoxiaozi.com';
document.write(str.search(
/xiaoxiaozi/));
//返回-1,因為我沒有指定模式i
var str = 'Welcome to xiaoxiaozi.com';
document.write(str.search(
/XIAOXIAOZI/));
//返回11,因為我指定了模式為i
var str = 'Welcome to xiaoxiaozi.com';
document.write(str.search(
/XIAOXIAOZI/i));
剛才樣本中參數我傳的是Regex,如果search()的參數不是Regex,它首先將被傳遞給RegExp建構函式,轉換成Regex。不過這裡需要注意的一下是search()不支援全域檢索,因為它忽略了Regex參數標誌g。
replace() 用於在字串中用一些字元替換另一些字元,或替換一個與Regex匹配的子串:
方法replace()執行檢索與替換操作。它的第一個參數是一個Regex,第二個參數是要進行替換的字串。它將檢索調用它的字串,根據指定的模式來匹配。如果Regex中設定了標誌g,該方法將用替換字串替換被檢索的字串中所有與模式比對的子串,否則它只替換所發現的第一個與模式比對的子串。
如果replace()的第一個參數是字串,而不是Regex,該方法將直接檢索那個字串,而不是像search()那樣用RegExp()建構函式將它轉換成一個Regex。
剛才我們給出的樣本中,replace()的第二個參數都是字串,其實其第二個參數還可以是函數,該函數能夠動態地計算替換字串,並且其函數的參數順序分別為:匹配整體正則的字串,匹配模式1的字串,匹配模式2的字串…。
//將字串的首字母大寫
name = 'aaa bbb ccc';
uw=name.replace(//b/w+/b/g, function(word){
return word.substring(0,1).toUpperCase()+word.substring(1);}
);
document.write (uw);
match() 可在字串內檢索指定的值,或找到一個或多個Regex的匹配:
match()方法是最常用的String方法,它唯一的參數就是一個Regex(或把它的參數傳遞給建構函式RegExp() 以轉換成Regex),返回的是包含了匹配結果的數組。如果該Regex有標誌g,該方法返回的數組包含的就是出現在字串中的所有匹配。
//result=["1","2","3","4"]
var str = '1a 2b 3c 4d';
var pattern =
//d+/g;
var result = str.match(pattern);
for(i in result)
{
document.write(result[i]);
}
如果match()參數中沒有設定g標誌,其進行的就不是全域檢索,但是仍然返回一個數組。在這種情況下,數組的第一個元素就是匹配的字串,而餘下的元素則是天上則表達工中用括弧括起來的子運算式。其返回的數組為result,result[0]存放的是完整匹配,result[1]存放的是$1匹配的內容,和replace()第二個函數參數一致。
/*
i is 0 http://www.xiaoxiaozi.com/index.php
i is 1 http
i is 2 www.xiaoxiaozi.com
i is 3 index.php
i is index 11
i is input my home is http://www.xiaoxiaozi.com/index.php
*/
var str = 'my home is http://www.xiaoxiaozi.com/index.php';
var pattern =
/(/w+):////([/w.]+)//(/S*)/;
var result = str.match(pattern);
for(i in result)
{
document.write("i is "+i+" "+result[i]+"<br/>");
}
此例我們可以看出,其如果作用於一個非全域的Regex,那麼match()返回的數組還包括另外兩個屬性——index和input,前者包含的是在字串中匹配開始處的字元的位置,後者則是目標字串的一個副本。
split() 用於把一個字串分割成字串數組:
String對象的最後一個有關Regex的方法是split(),此方法可以通過分隔字元把調用它的字串分隔為一個子串數組。其分隔字元可以是字元,字串,也可以是Regex。
/*
用一個空格分隔字串
my
home
page
is
http://www.xiaoxiaozi.com
*/
var str = 'my home page is http://www.xiaoxiaozi.com';
var result = str.split(" ");
for ( i in result)
{
document.write(result[i] + "<br/>");
}
上例沒有用Regex,可是如果我的字串中有空多個格咋辦?還有此方法得出的結果就不準確了啊,沒事,咱不是有Regex呢嗎?/s匹配的就是任何Unicode空格符,咱怕啥?
/*
使用Regex/s+一個或多個空格來分隔字串
my
home
page
is
http://www.xiaoxiaozi.com
*/
var str = 'my home page is http://www.xiaoxiaozi.com';
var result = str.split(
//s+/);
for ( i in result)
{
document.write(result[i] + "<br/>");
}