ES2020 中新的 String.prototype matchAll 方法详解

阅读时长 3 分钟读完

在 ES2020 中,新增了一个 String 原型中的 matchAll 方法,它可以返回一个迭代器对象,来对字符串进行全局匹配,它是一个非常强大的字符串处理工具。本文将详细介绍 matchAll 方法的使用和注意事项。

基本使用方法

matchAll 方法的基本用法很简单,它接收一个正则表达式作为参数,然后返回一个迭代器对象,你可以用 for...of 循环来遍历这个对象,获取所有匹配到的结果。

以上代码中,我们用正则表达式 \d+/g 对字符串进行全局匹配,然后将匹配结果赋值给变量 matches。接下来我们用 for...of 循环来遍历 matches 迭代器对象,获取每个匹配结果并将其打印到控制台上。

注意事项

matchAll 方法虽然功能强大,但也需要注意一些使用细节。下面是几个需要注意的点:

正则表达式必须是全局匹配模式

matchAll 方法只对全局匹配模式进行匹配,如果你传入的正则表达式不是全局匹配模式,那么它只会匹配第一项。比如:

以上代码中,我们传入了一个非全局匹配的正则表达式,在遍历迭代器对象时,只会返回匹配到的第一个匹配项。

matchAll 方法返回的迭代器对象是惰性的

matchAll 方法返回的迭代器对象是惰性的(lazy),也就是说只有在你遍历它时,它才会去匹配字符串并返回匹配项。如果你没有遍历迭代器对象,那么它不会进行任何匹配操作,也不会返回任何结果。我们来看下面的示例:

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

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

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

以上代码中,我们将匹配结果赋给了 matches 变量,并在 console.log 中打印出来,但是你会发现并没有输出任何东西。这是因为迭代器对象是惰性的,只有在 for of 循环中循环时才会进行字符串匹配。

迭代器对象只能遍历一次

matchAll 方法返回的迭代器对象只能遍历一次,如果你需要多次遍历,并且使用 for of 循环,那么你需要将它转换为数组进行操作。示例代码如下:

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

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

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

在以上代码中,我们先将迭代器对象转换为数组,然后进行两次遍历。

总结

matchAll 方法在字符串处理方面提供了很大的便利性,可以帮助我们快速找到需要的结果。它需要注意正则表达式必须是全局匹配模式、迭代器对象是惰性的,以及迭代器对象只能遍历一次这些细节问题。熟练掌握 matchAll 方法,对于前端开发者来说是非常必要的技能之一。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645c8214968c7c53b0ee94b9

纠错
反馈