JS中exec()与match()方法的区别与使用详解
本文详细解析JavaScript中正则表达式exec()与match()方法的使用差异。重点对比两者在非全局与全局匹配(g标志)下的返回值区别,特别是exec返回详细匹配对象而match返回数组的行为。同时阐述调用方式、子表达式处理及参数g对结果的影响,帮助开发者根据需求选择合适方法。
前言
在前端开发中,正则表达式的应用十分广泛,尤其在邮箱、手机号等格式校验场景中不可或缺。通常开发者会直接调用现成的正则模板,因为正则的使用场景相对固定且频率不高,多数人不会深入探究其底层实现原理,除非是精通正则的高级开发者。本文将重点介绍JavaScript中正则表达式两个常用方法:exec()和match(),以便在实际开发中查阅和使用。
exec()方法
1、定义和用法
exec()方法的主要功能是检索字符串中符合正则表达式的匹配项。
需要注意的是,如果字符串中存在匹配值,该方法将返回该匹配结果;若未找到匹配,则返回null。
2、语法
RegExpObject.exec(string)
3、参数描述
参数 | 描述 |
string | 必需的参数。要匹配的字符串 |
4、使用示例
以下示例演示如何在字符串中全局搜索关键词 "World" 和 "JS",具体代码实现如下:
var str="Hello World!";
//查找"World"
var patt=/World/g;
var result=patt.exec(str);
console.log("result====>",result); //输出结果:World
//查找 "JS"
patt=/JS/g;
result=patt.exec(str);
console.log("result====>",result); //输出结果:null

match()方法
1、定义和用法
match()方法主要用于在字符串中检索指定值,或查找一个或多个正则表达式的匹配项。
需注意,match()方法会检索字符串String Object,以寻找与regexp匹配的文本。其行为高度依赖于regexp是否设置了全局标志g。若未设置g标志,match()仅在stringObject中执行一次匹配;若未找到任何匹配文本,返回null;若找到,则返回包含匹配文本信息的数组。
2、语法
string.match(regexp)
3、参数描述
参数 | 描述 |
regexp | 必需的参数。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。 |
4、返回值
类型 | 描述 |
Array | 存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。 如果没找到匹配结果就返回 null 。 |
5、使用示例
①以下示例演示在字符串中全局查找 "good" 且不区分大小写的情况,具体代码如下:
var str="Good good study, day day up!";
var result=str.match(/good/gi);
console.log("result====>",result); //输出结果:Good,good
②拓展示例
将11位手机号按3、4、4的位数分割为三部分,具体代码如下:
var phone="13344445555"; //手机号为13344445555
var result = phone.match(/^(\d{3})(\d{4})(\d{4})$/);
console.log("result====>",result); //输出结果:133,4444,5555
延伸:exec()和match()最直观的比较
1、exec()和match()最直观的比较,具体对比如下:
- | -
—|—
Q | q
2、exec()和match()的本质区别
①当正则表达式不包含子表达式且未定义全局匹配时,exec()和match()的执行结果相同,均返回第一个匹配的字符串内容;
②当正则表达式不包含子表达式但定义为全局匹配时,exec()和match()均执行多处匹配,但只有match()返回包含多个元素的数组;
③当正则表达式包含子表达式且未定义全局匹配时,exec()和match()的执行结果一致;
④当正则表达式包含子表达式且定义为全局匹配时,exec()和match()的执行结果不同,其中match()会忽略子表达式,仅查找全匹配的正则表达式并返回所有匹配内容;
综上所述,exec()的结果与是否定义全局匹配关系不大,而match()则与全局标志紧密相关。当定义为非全局匹配时,exec()和match()的返回结果是一致的。
3、调用方式不同
exec()是正则表达式对象的方法,其参数为字符串;
match()是字符串对象的方法,其参数为正则表达式对象。
4、全局匹配不同
在进行全局匹配时,exec()仅匹配单次匹配上的内容,而match()会返回所有匹配内容的数组;
在进行全局匹配且多次匹配时,exec()会从上次匹配结束的下一位开始继续匹配,返回本次匹配的内容,直到没有可匹配内容时返回null;
也就是说,在非全局的正则匹配下,exec()和match()的返回结果是一致的;但在全局匹配的情况下,match()返回结果集数组,而exec()返回每一项匹配结果的详细信息。若需获取所有返回结果,则需要循环调用exec()方法。
5、对参数g的解释不同
当存在g标志时,exec()每次执行会呈现递进形式,否则每次执行结果相同;当存在捕获组时,exec()总会返回当前匹配项的捕获组信息。
当存在g标志时,match()执行全局检索,返回所有匹配项;不存在g标志时,match()仅返回第一个匹配项。当存在捕获组时,match()仅在非全局匹配(无g)的情况下,才返回第一个匹配项的捕获组。
最后
通过上述对JS中exec和match方法的对比总结,是否已彻底掌握相关知识点及使用原理?该知识点至关重要,完全掌握其原理后,无论未来在前端开发中遇到何种exec和match的使用场景,均可轻松应对。此处不再赘述其重要性。
到此这篇关于JS前端开发之exec()和match()对比使用的文章就介绍到这了,更多相关JS exec()和match()的使用内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
