正则表达式的exec()函数和字符串的match()函数之间的区别

正则表达式是前端开发中常用的一种技术,在处理字符串时可以借助正则表达式来实现更加复杂的匹配操作。在 JavaScript 中,使用正则表达式进行字符串匹配时,有两个常用的函数:exec()match()。本文将探讨这两个函数之间的区别。

exec()函数

exec() 是 RegExp 对象的一个方法,用于在字符串中查找匹配项。具体来说,它会返回一个数组,其中包含了与正则表达式匹配的子串以及捕获组(如果有)。如果没有找到匹配项,则返回 null

使用 exec() 的基本语法如下:

----- ----- - ----------
----- --- - ------- -- --------
--- ------ - ----------------

其中,/pattern/ 是正则表达式模式,str 是目标字符串,result 是存储匹配结果的数组。

如果匹配成功,result[0] 将会是匹配的子串,而其他元素则会对应正则表达式中的每个捕获组。例如,假设我们要从以下字符串中匹配出年份:

----- --- - ---- ---- -- ------
----- ----- - ----------
--- ------ - ----------------

result 数组的值将为 ["2023", "2023"]。其中,result[0] 包含整个匹配的字符串,而 result[1] 则是捕获组中的值。

match()函数

match() 是字符串对象的一个方法,用于返回一个包含所有匹配子串的数组。如果没有找到匹配项,则返回 null

使用 match() 的基本语法如下:

----- ----- - -----------
----- --- - ------- -- --------
--- ------ - -----------------

其中,/pattern/g 是正则表达式模式,str 是目标字符串,result 是存储匹配结果的数组。

exec() 不同的是,match() 不会返回捕获组的信息。例如,假设我们要从以下字符串中匹配出年份:

----- --- - ---- ---- -- ------
----- ----- - ---------
--- ------ - -----------------

result 数组的值将为 ["2023"],不包含任何捕获组信息。

区别

exec()match() 之间的最大区别在于它们返回的结果不同。exec() 返回一个数组,其中包含了正则表达式匹配的子串以及捕获组(如果有)。match() 返回一个数组,其中仅包含匹配的子串。

另一个区别在于,match() 方法只能通过字符串调用,而 exec() 方法必须通过正则表达式对象调用。

示例代码

下面是一个使用 exec()match() 进行匹配的示例代码:

----- --- - ---- ---- -- ------
----- ----- - -----------

-- -- ------ ----
--- --------
----- --------- - ---------------- --- ----- -
  ------------------ ------------- -- ----- -------------------
-

-- -- ------- ----
----- ------- - -----------------
---------------------

执行结果如下:

----- ---- -- ----- --
- ------ -

可以看到,exec() 返回了包含捕获组信息的数组,而 match() 则仅返回了匹配的子串。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/11280