引言
在JavaScript中,正则表达式提供了两种主要方法来查找字符串中与模式匹配的部分:exec()
和 match()
。虽然它们都用于匹配字符串,但使用场景和返回值有所不同。
exec()
exec()
方法是 RegExp
对象上的方法,用于执行一个搜索匹配。它返回一个数组,包含匹配到的信息,或者在没有匹配时返回 null
。
基本语法:
let regex = /pattern/g; // g 代表全局匹配
let result = regex.exec(string);
特点:
- 如果正则表达式包含全局标志
g
,exec()
方法会从上次匹配结束的位置开始搜索下一个匹配。如果没有全局标志,它始终从字符串的起始位置开始搜索。 - 返回的数组中,第一个元素是整个匹配的字符串,之后的元素是括号捕获组的内容(如果有)。数组还包含额外的属性如
index
表示匹配的起始索引,input
表示原始字符串。 - 可以多次调用
exec()
来查找字符串中的所有匹配,特别是在正则表达式设置了g
标志的情况下。
示例:
let regex = /\b(\w+)\b/g;
let text = "Hello world, welcome to the universe.";
let matches;
while ((matches = regex.exec(text)) !== null) {
console.log(`Found match at index ${matches.index}: ${matches[0]} - Group: ${matches[1]}`);
}
match()
match()
方法是字符串对象上的方法,它也用来查找与正则表达式匹配的字符串。不过,其行为会根据正则表达式是否有全局标志 g
而变化。
基本语法:
let result = string.match(regex);
特点:
- 如果正则表达式没有全局标志
g
,match()
返回一个数组,包含了完整的匹配以及任何括号捕获组。如果没有匹配,则返回null
。 - 当正则表达式包含
g
标志时,match()
返回一个数组,包含了所有非重叠的匹配项。注意,这与exec()
的连续调用不同,它不会更新搜索的起始位置。 - 如果正则表达式是空的(即
/./g
),并且被应用到一个空字符串上,match()
会返回一个空数组,而不是null
。
示例:
let text = "Hello world, welcome to the universe.";
let regexGlobal = /\b(\w+)\b/g; // 全局匹配
let regexNoGlobal = /\b(\w+)\b/; // 非全局匹配
console.log(text.match(regexNoGlobal)); // 返回第一个匹配
console.log(text.match(regexGlobal)); // 返回所有匹配项的数组
写在最后
- 使用
exec()
时,记得正则表达式对象的状态(如全局匹配的位置)会在每次调用后更新。 - 使用
match()
时,考虑正则表达式是否带有g
标志,因为它会影响返回值的形式。 - 两者都可用于查找匹配,但根据具体需求和偏好选择最适合的方法。
喜欢的话帮忙点个赞 + 关注吧,将持续更新 JavaScript
相关的文章,还可以关注我的公众号 梁三石FE
,感谢您的关注~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。