关于两个方法的基本用法可以参阅一下两篇文章:
(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));
代码运行效果截图如下:
很明显,两个方法的返回值是一模一样的。
(2).全局匹配:
当为全局匹配的时候,返回结果出现很大不同。
match方法返回一个存放所有匹配内容的数组(无视子表达式的匹配)。
exex方法返回数组不会存储所有的匹配,仅存储第一个匹配到的内容(存储在数字第一个元素),第二个元素存储第一个子表达式匹配到的内容,第三个元素存储第二个子表达式匹配到的内容,以此类推。
[JavaScript] 纯文本查看 复制代码运行代码let str="antzoane"; let reg=/a(n)/g; console.log(str.match(reg)); console.log(reg.exec(str));
代码运行效果截图如下:
运行效果截图印证了前面的理论阐述。全局匹配下,exec方法还可以与lastIndex属性配合使用。
lastIndex属性可以返回或者设置正则表达式将要开始的匹配的起始位置。
对match方法而言,lastIndex属性值始终为0。
[JavaScript] 纯文本查看 复制代码运行代码let str="ant8zone"; let reg=/\d/g; console.log(reg.exec(str)); console.log(reg.lastIndex);
代码运行效果截图如下:
初始状态lastIndex属性值为0,正则表达式匹配到数字8,在字符串中的位置为3。
那么下一次就是从字符"z"处开始匹配,"z"的位置是4。
对于match方法而言,lastIndex值始终为0,基本没啥实质应用意义。
前端教程
HTML5 API
鲁ICP备10022556号-3
鲁公网安备 37021302000666号
关于我们
|手机版|小黑屋|
Copyright © 2012-2020 Design: 蚂蚁部落
最新评论