match()與exec()區別

2018-9-12 09:38| 作者: admin| 查看: 4671| 評論: 0|來自: 螞蟻部落

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

(1).正則表達式 exec()方法一章節。

(2).正則表達式match()方法一章節。

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

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

一.所屬對象的不同:

這個區別最為簡單明顯。

match方法屬于字符串對象,exec方法屬于正則表達式對象。

代碼實例如下:

[JavaScript] 純文本查看 復制代碼运行代码
let str="antzone"; 
let reg=/n/;
console.log(reg.exec(str));

exec方法的調用對象是正則表達式對象,方法的參數是字符串。

[JavaScript] 純文本查看 復制代碼运行代码
let str="本站url地址是www.arpjr.tw"; 
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,基本沒啥實質應用意義。

1

鮮花

握手

雷人

路過

雞蛋

剛表態過的朋友 (1 人)

最新評論

返回頂部
大圣捕鱼2 6374刘佰温今晚开奖结果 香港马会手机软件 重庆时时全天计划 广东时时三星分析 山东群英会每天开奖 期特码资料 快三历史开奖记录 谁见过十一选五赢钱的 湖北快三玩法与技巧 上海快三走势图开门彩 黑彩网黑客修改余额 公式规律全年特尾出码表 北京快三连线走势图 彩票平台在线投注快乐时时彩 797通比牛牛 3d跨度基本走势图