match()與exec()區別

admin發表於2018-09-12

關於兩個方法的基本用法可以參閱一下兩篇文章:

(1).正規表示式 exec()方法一章節。

(2).正規表示式match()方法一章節。

只要閱讀上述兩篇文章,並掌握各自用法,自然就很清楚它們之間的區別。

為了便於學習,本文再將兩個方法的區別進行一下總結。

一.所屬物件的不同:

這個區別最為簡單明顯。

match方法屬於字串物件,exec方法屬於正規表示式物件。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzone"; 
let reg=/n/;
console.log(reg.exec(str));

exec方法的呼叫物件是正規表示式物件,方法的引數是字串。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="本站url地址是www.softwhy.com"; 
let reg=/why/;
console.log(str.match(reg));

match方法由字串物件呼叫,方法的引數是正規表示式。

二.方法返回結果的不同:

(1).非全域性匹配:

當採用非全域性匹配的時候,兩個方法的返回值完全一樣。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzoane"; 
let reg=/a(n)/;
console.log(str.match(reg));
console.log(reg.exec(str));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/12/094223yvochn7ddoe6ctfv.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

很明顯,兩個方法的返回值是一模一樣的。

(2).全域性匹配:

當為全域性匹配的時候,返回結果出現很大不同。

match方法返回一個存放所有匹配內容的陣列(無視子表示式的匹配)。

exex方法返回陣列不會儲存所有的匹配,僅儲存第一個匹配到的內容(儲存在數字第一個元素),第二個元素儲存第一個子表示式匹配到的內容,第三個元素儲存第二個子表示式匹配到的內容,以此類推。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzoane"; 
let reg=/a(n)/g;
console.log(str.match(reg));
console.log(reg.exec(str));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/12/094339kmsm5uchkmkdh5dt.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

執行效果截圖印證了前面的理論闡述。全域性匹配下,exec方法還可以與lastIndex屬性配合使用。

lastIndex屬性可以返回或者設定正規表示式將要開始的匹配的起始位置。

對match方法而言,lastIndex屬性值始終為0。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="ant8zone"; 
let reg=/\d/g;
console.log(reg.exec(str));
console.log(reg.lastIndex);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/12/094414t3jknaisiwuis9mu.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

初始狀態lastIndex屬性值為0,正規表示式匹配到數字8,在字串中的位置為3。

那麼下一次就是從字元"z"處開始匹配,"z"的位置是4。

對於match方法而言,lastIndex值始終為0,基本沒啥實質應用意義。

相關文章