match()与exec()区别

2018-9-12 09:38| 作者: admin| 查看: 419| 评论: 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.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,基本没啥实质应用意义。

1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

最新评论

返回顶部