在 JavaScript 中,exec() 和 match() 区别

在 JavaScript 中,exec() 和 match() 都是与正则表达式相关的常用方法,但它们的使用方式和返回的结果有所不同。

exec() 方法

exec() 是 RegExp 对象的一个方法,用于在字符串中执行一次正则表达式匹配。它的语法是:

regexp.exec(string)

其中 regexp 是一个正则表达式对象,string 是要在其中执行匹配的字符串。

exec() 方法返回一个数组,包含匹配的结果。如果没有匹配项,则返回 null。返回的数组包含特定的属性:

  • index:匹配项在字符串中的位置。
  • input:被查找的原始字符串。
  • groups:命名捕获组的对象(如果正则表达式中有命名捕获组的话)。

如果正则表达式包含全局标志 gexec() 方法的行为会有所不同。在带有 g 标志的情况下,每次调用 exec() 都会返回字符串中的下一个匹配项,直到没有更多的匹配项为止。每次调用后,正则表达式对象的 lastIndex 属性都会更新,以反映下一次匹配开始的位置。

match() 方法

match() 是字符串对象的一个方法,用于在字符串中检索与正则表达式匹配的项。它的语法是:

str.match(regexp)

其中 str 是字符串对象,regexp 可以是正则表达式对象或者正则表达式字面量。

match() 方法返回一个数组,包含字符串中所有与正则表达式匹配的项。如果没有匹配项,则返回 null。如果正则表达式没有全局标志 gmatch() 的行为类似于 regexp.exec(str),但返回的是整个匹配结果的数组,而不是包含匹配信息的数组数组。如果正则表达式包含 g 标志,match() 会返回所有匹配项的数组。

区别

  • 调用者不同:exec() 是 RegExp 对象的方法,而 match() 是字符串对象的方法。
  • 返回值:在不使用全局标志 g 的情况下,两者都返回包含匹配结果的数组。但在使用 g 时,exec() 在每次调用时返回下一个匹配项,而 match() 返回所有匹配项的数组。
  • 用途:exec() 更适用于在循环中逐个检索匹配项,特别是当需要访问正则表达式的 lastIndex 属性时。而 match() 则更直接地返回所有匹配项,适合一次性获取所有匹配结果。

示例

let str = "The rain in SPAIN stays mainly in the plain";  
let regex = /ain/g;  
  
// 使用 exec()  
let execResult;  
while ((execResult = regex.exec(str)) !== null) {  
  console.log(execResult[0]); // 依次输出 "ain", "ain", "ain"  
}  
  
// 使用 match()  
let matchResult = str.match(regex);  
console.log(matchResult); // 输出 ["ain", "ain", "ain"]

在这个例子中,exec() 在循环中被用来逐个检索匹配项,而 match() 则直接返回所有匹配项的数组。

posted @ 2024-04-06 09:46  落花看风雪  阅读(63)  评论(0编辑  收藏  举报