JavaScript 用於模式比對的 String 方法

來源:互聯網
上載者:User

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+"&nbsp;&nbsp;"+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/>");
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.