正規表示式match()函式和exec()函式的區別

admin發表於2017-02-10
match()函式和exec()函式是在應用正規表示式中最為常用的兩個函式,它們有很大的相同之處也有很多不同點,下面就通過程式碼例項介紹一下,希望能夠對需要的朋友帶來一定的幫助。

一.match()函式:

此函式可以檢索指定的字串,以查詢指定的值或者正規表示式的一個或者多個匹配。

當此函式與正規表示式相結合應用時,返回值和這規則表示式是否具有匹配修飾符g有著重要的關係,下面分別介紹一下:

1).不具有修飾符g:

[JavaScript] 純文字檢視 複製程式碼
var str="I love antzone,and you?";
console.log(str.match(/an/));

當不具有修飾符g的時候,只會執行一次成功的匹配,返回值是一個陣列:

陣列的第0元素是匹配的文字,第一個元素是與正規表示式第一個子表示式匹配的文字,第二個是與正規表示式第二個子表示式匹配的文字,依次類推。上面的陣列元素之外,還有兩個特殊的物件屬性:index屬性宣告的是匹配文字的起始字元在目標字串中的位置,input屬性宣告的是對目標字串的引用。

特別注意:

在IE8和IE8以下瀏覽器中,此函式的返回的陣列也包含lastIndex資訊,用來表示匹配子串的下一個位置。

2).具有修飾符g:

當具有修飾符g的時候,match()函式的返回值就比較單純了,儲存的是所有匹配的文字。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var str="I love antzone,and you?";
console.log(str.match(/an/g));

特別注意:

在IE瀏覽器中,陣列的元素值,不但包含所有的匹配文字,而且還有index、input和lastIndex屬性。

二.exec()函式:

和match()函式一樣,具有修飾符g和沒有修飾符g,函式的返回值是有很大不同的。

1).不具有修飾符g:

這個時候exec()函式的返回值和match()函式不具有修飾符g的時候是一樣的。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var str="I love antzone,and you?";
var reg=/an/;
console.log(reg.exec(str));

特別注意:

在IE8和IE8以下瀏覽器中,此函式的返回的陣列也包含lastIndex資訊,用來表示匹配子串的下一個位置。

2).具有修飾符g:

[JavaScript] 純文字檢視 複製程式碼
var str="I love antzone,and you?";
var reg=/an/g;
console.log(reg.exec(str));

具有修飾符g的時候和不具有修飾符g的時候,返回陣列值的唯一不同就是帶有修飾符g的具有lastIndex資訊。

regexp物件的lastIndex屬性指定的字元處開始檢索。當exec()找到了與表示式相匹配的文字時,在匹配後,會將regexp的lastIndex屬性設定為匹配文字的最後一個字元的下一個位置,於是可以通過反覆呼叫exec()來遍歷字串中的所有匹配文字。當exec()再也找不到匹配的文字時,它將返回null,並把lastIndex屬性重置為0。 

最後總結:

1.match函式屬於String物件,exec函式屬於正則物件。

2.不具有修飾符g的時候,兩個函式的返回值是一樣的。

3.具有修飾符g的時候,match()函式返回的陣列存放的是所有匹配的文字,再無其他(IE瀏覽器是例外),但是exec函式返回的陣列存放的內容則要複雜一些,第0個元素是第一個成功匹配的文字,第一個元素是與正規表示式第一個子表示式匹配的文字,第二個是與正規表示式第二個子表示式匹配的文字,依次類推,同時還有三個特殊的物件屬性:index、input和lastIndex屬性。

相關文章