介绍
在 ES5 中,我们已经可以使用 String.prototype.match() 方法从字符串中提取匹配某个模式的字符串。但是在 ES11 中,新增了一个 String.prototype.matchAll 方法,它与 match 方法不同的是可以一次性获取全部匹配结果,而不是只获取第一个匹配结果。
该方法返回一个迭代器对象,我们可以通过 for...of 循环来遍历每个匹配结果,并获取每个匹配结果的详细信息。
语法
string.matchAll(regexp)
string
: 要匹配的字符串。regexp
: 用于匹配的正则表达式。
返回值
返回一个迭代器对象,其中每个成员都是一个 Array 类型的匹配结果数组,包含匹配到的完整字符串和捕获组字符串。
用法
案例一:获取所有匹配结果
下面是一段示例代码使用 matchAll 方法,先构造一个正则表达式用来匹配 email 地址,然后从一个字符串中提取匹配的所有结果并遍历每个结果:
-- -------------------- ---- ------- ----- --- - ------- ------------------ ------ ---------------- ----- ------ - ----------------------------------------------------- ----- ------- - -------------------- --- ------ ----- -- -------- - ------------------ -
输出结果:
Array(2) [ "alice@example.com", "alice" ] Array(2) [ "bob@example.com", "bob" ]
案例二:使用捕获组
下面是一段示例代码使用 matchAll 方法,利用正则表达式的捕获组功能获取所有匹配结果中的 username 部分:
-- -------------------- ---- ------- ----- --- - ------- ------------------ ------ ---------------- ----- ------ - ------------------------------------------------------- ----- ------- - -------------------- --- ------ ----- -- -------- - --------------------- --------- -
输出结果:
alice example.com bob example.com
注意事项
在使用 matchAll 方法时,需要注意以下几点:
\b
前缀可以用来确保匹配的是整个单词。- 匹配结果中第一个元素是完整匹配的字符串,而剩下的元素是每个捕获组匹配到的字符串。
- 迭代器对象的遍历性能相比于
String.prototype.match
方法要更好,特别是在大量匹配时。
总结
使用 ES11 中的 String.prototype.matchAll 方法可以更快捷地从字符串中提取匹配某个模式的字符串,并且它比之前的方法性能更好。当我们需要获取一个字符串中多个匹配结果时,matchAll 方法可以提高我们的代码效率,减少我们的代码复杂度。
可以通过上述案例进行实际操作,掌握 String.prototype.matchAll 方法的使用技巧。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b749baadd4f0e0fffdba3b