正则表达式是前端开发中常用的一种技术,在处理字符串时可以借助正则表达式来实现更加复杂的匹配操作。在 JavaScript 中,使用正则表达式进行字符串匹配时,有两个常用的函数:exec()
和 match()
。本文将探讨这两个函数之间的区别。
exec()函数
exec()
是 RegExp 对象的一个方法,用于在字符串中查找匹配项。具体来说,它会返回一个数组,其中包含了与正则表达式匹配的子串以及捕获组(如果有)。如果没有找到匹配项,则返回 null
。
使用 exec()
的基本语法如下:
const regex = /pattern/; const str = "string to search"; let result = regex.exec(str);
其中,/pattern/
是正则表达式模式,str
是目标字符串,result
是存储匹配结果的数组。
如果匹配成功,result[0]
将会是匹配的子串,而其他元素则会对应正则表达式中的每个捕获组。例如,假设我们要从以下字符串中匹配出年份:
const str = "The year is 2023"; const regex = /(\d{4})/; let result = regex.exec(str);
result
数组的值将为 ["2023", "2023"]
。其中,result[0]
包含整个匹配的字符串,而 result[1]
则是捕获组中的值。
match()函数
match()
是字符串对象的一个方法,用于返回一个包含所有匹配子串的数组。如果没有找到匹配项,则返回 null
。
使用 match()
的基本语法如下:
const regex = /pattern/g; const str = "string to search"; let result = str.match(regex);
其中,/pattern/g
是正则表达式模式,str
是目标字符串,result
是存储匹配结果的数组。
与 exec()
不同的是,match()
不会返回捕获组的信息。例如,假设我们要从以下字符串中匹配出年份:
const str = "The year is 2023"; const regex = /\d{4}/g; let result = str.match(regex);
result
数组的值将为 ["2023"]
,不包含任何捕获组信息。
区别
exec()
和 match()
之间的最大区别在于它们返回的结果不同。exec()
返回一个数组,其中包含了正则表达式匹配的子串以及捕获组(如果有)。match()
返回一个数组,其中仅包含匹配的子串。
另一个区别在于,match()
方法只能通过字符串调用,而 exec()
方法必须通过正则表达式对象调用。
示例代码
下面是一个使用 exec()
和 match()
进行匹配的示例代码:
-- -------------------- ---- ------- ----- --- - ---- ---- -- ------ ----- ----- - ----------- -- -- ------ ---- --- -------- ----- --------- - ---------------- --- ----- - ------------------ ------------- -- ----- ------------------- - -- -- ------- ---- ----- ------- - ----------------- ---------------------
执行结果如下:
Found 2023 at index 12 [ '2023' ]
可以看到,exec()
返回了包含捕获组信息的数组,而 match()
则仅返回了匹配的子串。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/11280