match()函数和exec()函数的区别
本文于 377 天之前发表,文中内容可能已经过时。
一、match() 方法
1.1、用途
match() 是 字符串(String) 对象的方法,用来根据正则表达式匹配字符串。它会返回一个 数组 或 null,取决于是否匹配到。
1.2、语法
1 | string.match(regexp) |
- regexp:可以是正则表达式或者字符串(自动转成正则)。
1.3、返回值规则
- 如果正则表达式不带全局标志
g,返回的数组第 **0 **项是匹配到的内容,第 1 项开始是捕获组(如果有),并有额外的属性index和input。 - 如果带
g,match()返回一个包含所有匹配到的字符串的数组(没有捕获组信息)。 - 如果没有匹配,返回
null。
1.4、常见示例
1 | // 不带 g 的情况 |

2. exec() 方法
2.1、用途
exec() 是 正则表达式(RegExp) 对象的方法,执行匹配并返回匹配结果数组或 null。
2.2、语法
1 | regexp.exec(string) |
2.3、返回值规则
- 返回的数组第 0 项是匹配到的整体,第 1 项开始是捕获组内容。
- 总是返回第一个匹配;如果正则表达式有
g标志,exec()会在多次调用之间保存上一次的匹配位置(依靠lastIndex属性)。
2.4、常见示例
1 | jslet regex = /(\d{4})-(\d{2})-(\d{2})/; |
3. 总结对比
| 特性 | match() (String 方法) | exec() (RegExp 方法) |
|---|---|---|
| 调用者 | 字符串 | 正则表达式 |
| 返回值 | 数组或 null | 数组或 null |
| 处理全局匹配 | 带 g 返回所有匹配值数组,没有捕获组信息 | 带 g 需循环多次调用得到所有结果 |
| 捕获组信息 | 不带 g 可以得到捕获组信息 | 可以得到捕获组信息 |
| 常用场景 | 直接获取所有匹配的字符串 | 逐步分析匹配并获取捕获组 |
✅ 建议使用
- 只是要所有匹配的结果 →
match()+g - 需要捕获组(并可能遍历所有匹配项) →
exec()结合循环
