JavaScript:用於模式比對的String方法

來源:互聯網
上載者:User

String的部分方法,在Regex中執行模式比對、檢索和替換操作。String支援四種利用Regex的方法:

① search( ):

該方法以Regex為參數,返回第一個與之匹配的子串的開始字元的位置,如果沒有任何匹配的子串,它將返回-1。例如下面的調用返回4:

"JavaScript".search(/script/i);  //4

如果search( )的參數不是Regex,它首先將被傳遞給RegExp建構函式,轉換成Regex。search( )不支援全域檢索,因為它忽略了Regex參數的標誌g。

② replace( ):

該方法執行檢索與替換操作。它的第一個參數是一個Regex,第二個參數是要進行替換的字串。它將檢索調用它的字串,根據指定的模式來匹配。如果Regex中設定了標誌g,該方法將用替換字串替換被檢索的字串中所有與模式比對的子串,否則它只替換所發現的第一個與模式比對的子串。如果replace( )的第一個參數是字串,而不是Regex,該方法將直接檢索那個字串,而不是像search(
)那樣用RegExp( )建構函式將它轉換成一個Regex。例如,我們可以用如下方法使用replace( )將文本字串中的所有javascript(不區分大小寫)統一為“JavaScript”:

<script>          var text="javascript and JAVAscript and c++";          alert(text.replace(/javascript/gi,"JavaScript"));  </script> 

但是replace( )的功能遠比上例所示強大。最值得注意的是,replace( )方法的第二個參數可以是函數,該函數能夠動態地計算替換字串。replace( )還有其他重要特性,這裡不一一贅述。

③ match( ):

match( )方法是String最常用的Regex方法。它唯一的參數就是一個Regex(或把它的參數傳遞給建構函式RegExp( )以轉換成Regex),返回的是包含了匹配結果的數組如果該Regex設定了標誌g,該方法返回的數組包含的就是出現在字串中的所有匹配。例如:

<script>        alert("1 plus 2 equals 3".match(/\d+/g));  //1,2,3</script>

如果該Regex沒有設定標誌g,match( )進行的就不是全域性檢索,它只是檢索第一個匹配。但即使match( )執行的不是全域檢索,它也返回一個數組。在這種情況下,數組的第一個元素就是匹配的字串,而餘下的元素則是Regex中用括弧括起來的子運算式。因此如果match( )返回了一個數組a,那麼a[0]存放的是完整的匹配,a[1]存放的則是與第一個用括弧括起來的運算式匹配的子串,以此類推。為了和方法replace(
)保持一致,a[n]存放的是$n的內容。

例如使用如下的代碼來解析一個URL:

<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head><body><script>  var url=/(\w+):\/\/([\w.]+)\/(\S*)/;var text="visit my blog at http://www.example.com/david";var result=text.match(url);if(result!=null){var fullurl=result[0];var protocol=result[1];var host=result[2];var path=result[3];alert(fullurl+"\n"+protocol+"\n"+host+"\n"+path);}            </script>  </body></html>

最後,還應該瞭解match( )的一個特性。它返回的數組和其他的數組一樣具有一個length屬性。如果match( )是作用於一個非全域的Regex,那麼它返回的數組還包括另外兩個屬性--index和input,前者包含的是在字串中匹配開始處的字元的位置,後者則是目標字串的一個副本。這樣,在上面的代碼中,result.index屬性的值應該等於17,因為匹配了的URL是從文本中的第17個字元的位置開始。而屬性result.input則應該具有和變數text相同的字串。對於沒有標誌g的Regexr和字串s,調用s.match(r)返回的值與r.exec(s)相同。我們會在後續文章中討論RegExp.exec(
)方法。

④ split( ):

這個方法可以把調用它的字串分解為一個子串數組,使用的分隔字元是它的參數。例如:

"123,456,789".split(",");  //123,456,789

split( )方法也可以以Regex為參數。這種能力使該方法更強大。例如我們可以指定分隔字元,允許兩邊有任意多個空白符:

"1,2, 3 , 4  ,5".split(/\s*,\s*/);  //1,2,3,4,5

split( )方法還有其他的特性,這裡不一一贅述。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.