Javascript正則表達式詳解2

正則表達式的 String 對象的4種方法

1.match() 方法定義和用法

match() 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配正則表達式

該方法相似 indexOf() 和 lastIndexOf(),可是它返回指定的值,而不是字符串的位置數組

語法

stringObject.match(searchvalue)
stringObject.match(regexp)
參數 描述
searchvalue 必需。規定要檢索的字符串值。
regexp 必需。規定要匹配的模式的 RegExp 對象。若是該參數不是 RegExp 對象,則須要首先把它傳遞給 RegExp 構造函數,將其轉換爲 RegExp 對象。

返回值

存放匹配結果的數組。該數組的內容依賴於 regexp 是否具備全局標誌 g。函數

    1. 若是 regexp 沒有標誌 g,那麼 match() 方法就只能在 stringObject 中執行一次匹配。若是沒有找到任何匹配的文本, match() 將返回 null。不然,它將返回一個數組,其中存放了與它找到的匹配文本有關的信息。該數組的第 0 個元素存放的是匹配文本,而其他的元素存放的是與正則表達式的子表達式匹配的文本。除了這些常規的數組元素以外,返回的數組還含有兩個對象屬性。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對 stringObject 的引用
    2. 若是 regexp 具備標誌 g,則 match() 方法將執行全局檢索,找到 stringObject 中的全部匹配子字符串。若沒有找到任何匹配的子串,則返回 null。若是找到了一個或多個匹配子串,則返回一個數組。不過全局匹配返回的數組的內容與前者大不相同,它的數組元素中存放的是 stringObject 中全部的匹配子串,並且也沒有 index 屬性或 input 屬性。spa

       

       

    3.  

      注意:在全局檢索模式下,match() 即不提供與子表達式匹配的文本的信息,也不聲明每一個匹配子串的位置。若是您須要這些全局檢索的信息,可使用 RegExp.exec()。regexp

    4. match() 與exec()的區別

      1. 不一樣點:
      • exec() 方法是RegExp對象方法,而match是字符串對象的方法;
      • 在調用全局的時候,exec()方法每次在 RegExpObject 的 lastIndex 屬性指定的字符處開始檢索字符串 string。當 exec() 找到了與表達式相匹配的文本時,在匹配後,它將把 RegExpObject 的 lastIndex 屬性設置爲匹配文本的最後一個字符的下一個位置,這就是說,您能夠經過反覆調用 exec() 方法來遍歷字符串中的全部匹配文本。可是不能一次就能把字符串中能匹配的文本找出來。當 exec() 再也找不到匹配的文本時,它將返回 null,並把 lastIndex 屬性重置爲 0。
      • 在調用全局的狀況下,match()方法找到 stringObject 中的全部匹配子字符串並返回一個數組。
      • 在調用全局的狀況下,match()方法是不具有index和input這兩個屬性,而exec()方法這具有這兩個屬性。
      1. 相同點:返回值都是數組;在調用非全局的時,exec() 方法和match()都有兩個屬性,index 屬性聲明的是匹配文本的第一個字符的位置。input 屬性則存放的是被檢索的字符串 string。

2.search()定義和用法

 

search() 方法用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串對象

 

語法

 

stringObject.search(regexp)

 

參數 描述
regexp

該參數能夠是須要在 stringObject 中檢索的子串,也能夠是須要檢索的 RegExp 對象。blog

註釋:要執行忽略大小寫的檢索,請追加標誌 i。ip

 

返回值

 

stringObject 中第一個與 regexp 相匹配的子串的起始位置返回的結果是一個數字字符串

 

註釋:若是沒有找到任何匹配的子串,則返回 -1get

 

說明

search() 對大小寫敏感

search() 方法不執行全局匹配,它將忽略標誌 g。它同時忽略 regexp 的 lastIndex 屬性,而且老是從字符串的開始進行檢索,這意味着它老是返回 stringObject 的第一個匹配文本的第0個元素的位置,並且它一旦遇到匹配的文本就結束檢索。

3.replace() 方法

定義和用法

replace() 方法用於在字符串中用一些字符替換另外一些字符,或替換一個與正則表達式匹配的子串。

語法

stringObject.replace(regexp/substr,replacement)
參數 描述
regexp/substr

必需。規定子字符串或要替換的模式的 RegExp 對象。

請注意,若是該值是一個字符串,則將它做爲要檢索的直接量文本模式,而不是首先被轉換爲 RegExp 對象。

replacement 必需。一個字符串值。規定了替換文本或生成替換文本的函數。

返回值

一個新的字符串,是用 replacement 替換了 regexp 的第一次匹配或全部匹配以後獲得的。

說明

字符串 stringObject 的 replace() 方法執行的是查找並替換的操做。它將在 stringObject 中查找與 regexp 相匹配的子字符串,而後用 replacement 來替換這些子串。若是 regexp 具備全局標誌 g,那麼 replace() 方法將替換全部匹配的子串。不然,它只替換第一個匹配子串。

replacement 能夠是字符串,也能夠是函數。若是它是字符串,那麼每一個匹配都將由字符串替換。可是 replacement 中的 $ 字符具備特定的含義。以下表所示,它說明從模式匹配獲得的字符串將用於替換。

字符 替換文本
$一、$二、...、$99 與 regexp 中的第 1 到第 99 個子表達式相匹配的文本。
$& 與 regexp 相匹配的子串。
$` 位於匹配子串左側的文本。
$' 位於匹配子串右側的文本。
$$ 直接量符號。

注意:ECMAScript v3 規定,replace() 方法的參數 replacement 能夠是函數而不是字符串。在這種狀況下,每一個匹配都調用該函數,它返回的字符串將做爲替換文本使用。該函數的第一個參數是匹配模式的字符串。接下來的參數是與模式中的子表達式匹配的字符串,能夠有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明瞭匹配在 stringObject 中出現的位置。最後一個參數是 stringObject 自己。

4.split() 方法

定義和用法

split() 方法用於把一個字符串分割成字符串數組。

語法

stringObject.split(separator,howmany)
參數 描述
separator 必需。字符串或正則表達式,從該參數指定的地方分割 stringObject。
howmany 可選。該參數可指定返回的數組的最大長度。若是設置了該參數,返回的子串不會多於這個參數指定的數組。若是沒有設置該參數,整個字符串都會被分割,不考慮它的長度。

返回值

一個字符串數組。該數組是經過在 separator 指定的邊界處將字符串 stringObject 分割成子串建立的。返回的數組中的字串不包括 separator 自身

可是,若是 separator 是包含子表達式的正則表達式,那麼返回的數組中包括與這些子表達式匹配的字串(但不包括與整個正則表達式匹配的文本)。

提示和註釋

註釋:若是把空字符串 ("") 用做 separator,那麼 stringObject 中的每一個字符之間都會被分割。

註釋:String.split() 執行的操做與 Array.join 執行的操做是相反的。

相關文章
相關標籤/搜索