天天看點

javascript正規表達式(6)——字元串對象方法

String.protatype.search(reg)

1.search()方法用于檢索字元串中指定的子字元串,或檢索與正規表達式相比對的子字元串

2.方法傳回第一個比對結果index,查找不到傳回-1

3.search()方法不執行全局比對,它将忽略标志g,并且總是從字元串的開始進行檢索

下面請看例子:

javascript正規表達式(6)——字元串對象方法

1.傳入的參數可以不是字元串

2.當傳入的參數不是正則的時候,系統會嘗試把參數轉換成正則,如1->/1/

3.不執行全局比對,忽略标志g,并且總是從字元串的開始進行檢索。這一點大家可以從最後3條一樣的指令看出

String.protatype.match(reg)

1.match()方法将檢索字元串,以找到一或多個與regexp比對的文本

2.regexp是否具有标志g對結果影響很大

我們來看一下沒有g的時候,也就是非全局調用的時候

                                                                          非全局調用

1.如果regexp沒有标志g,那麼match()方法就隻能在字元串中執行一次比對

2.如果沒有找到任何比對的文本,将傳回null

3.否則它将傳回一個數組,其中存放了與它找到的比對文本有關的資訊

那麼它傳回了什麼了?我們以前回顧前面非全局調用的内容(與exec是相同的):

1.傳回數組的第一個元素存放的是比對文本,而其餘的元素存放的是與正規表達式的子表達式比對的文本

2.除了正常的數組元素之外,傳回的數組還有2個對象屬性

     a. index聲明比對文本的起始字元在字元串的位置

     b. input聲明對stringObject的引用

非全局調用請看下圖:

javascript正規表達式(6)——字元串對象方法

                                                                                  全局調用

1.如果regexp具有标志g則match()方法将執行全局檢索,找到字元串中的所有比對子字元串

    a.沒有找到任何比對的子串,則傳回null

    b.如果找到了一個或多個比對子串,則傳回一個數組

2.數組元素中存放的是字元串中所有的比對子串,而且也沒有index屬性或input屬性

全局調用請看下圖

javascript正規表達式(6)——字元串對象方法

我們可以看到,match()方法傳回的數組既沒有比對的分組資訊,也沒有相應的下标資訊。隻是單單的告訴你有幾個比對結果,如果我們隻是想獲得比對内容的話,用match()效率會高一些。如果我們需要詳細資訊,則應該選擇exec()方法。

String.prototype.split(reg)

1.我們經常使用split方法把字元串分割為字元數組

'a,b,c,d'.split(','); //["a","b","c","d"]

2.在一些複雜的分割情況我們可以使用正規表達式解決

'a1b2c3d'.split(/\d/); //["a","b","c","d"]

javascript正規表達式(6)——字元串對象方法

一般的分割我們用不到正則,但是當我們需要分割的字元串中既包含逗号(,)又包含豎線(|)的時候,正規表達式的友善就展現出來了

String.prototype.replace

這是最常用的正則函數之一,可以傳入2個參數,一個參數用于查找,一個參數用于替換。

第一個例子:

javascript正規表達式(6)——字元串對象方法

第二個例子:

javascript正規表達式(6)——字元串對象方法

第二個例子很明顯沒有達到我們期望的效果,後面兩個1沒有被替換,它隻比對了第一個參數。那麼如何才能實作我們要的效果呢?

看一下replace()方法接受哪些參數

String.prototype.replace(str,replaceStr)

String.prototype.replace(reg,replaceStr)

String.prototype.replace(reg,function)

是以我們可以傳入正規表達式的參數,這個時候用正則會友善一點。

javascript正規表達式(6)——字元串對象方法

其實看到這裡大家也應該猜到了,為什麼第二個例子中隻有第一個1被替換了?因為'1'被隐式轉換成了/1/這種正則的寫法。

但是當我們需要進行更精細的操作的時候,正規表達式作為參數就無能為力了,比如我們要将:a1b2c3 => a2b3c4 ,每一個數字加1

                                                                      function參數含義

function會在每次比對替換的時候調用,有四個參數(參數個數不固定)

1.比對字元串

2.正規表達式分組内容,沒有分組則沒有該參數

3.比對項在字元串中的index

4.原字元串

如果沒有分組則隻有3個參數,如果有1個分組則有4個參數,如果有2個分組則有5個參數。我們需要根據不同的正規表達式來寫不同參數個數的函數,這種設計不太好

請看第一個例子:

javascript正規表達式(6)——字元串對象方法

搜尋數字,第一個參數是比對結果,第二個參數是目前比對的位置,第三個參數是原字元串,因為這裡沒有分組,是以隻有3個參數

請看第二個使用分組的例子:

javascript正規表達式(6)——字元串對象方法

添加了分組參數,其他同第一個例子

繼續閱讀