ES10 中新增的 String.prototype.matchAll() 和正则表达式的配合使用

阅读时长 8 分钟读完

在 ES10 中,新增了一个非常实用的方法 String.prototype.matchAll(),它可以配合正则表达式使用,用于获取字符串中所有匹配正则表达式的子串。这个方法的出现,可以让我们更方便地处理字符串中的匹配问题,提高代码的可读性和可维护性。

String.prototype.matchAll() 的使用方法

String.prototype.matchAll() 方法的使用方法与 String.prototype.match() 方法类似,都是用于字符串匹配的。不同的是,matchAll() 方法返回的是一个迭代器,可以遍历字符串中所有匹配正则表达式的子串,而 match() 方法只返回第一个匹配的子串。

下面是 matchAll() 方法的使用示例:

输出结果为:

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

可以看到,matchAll() 方法返回的是一个迭代器,可以通过 for...of 循环遍历其中的每一个匹配结果。每一个匹配结果都是一个数组,包含了匹配到的子串和相关信息。

String.prototype.matchAll() 的指导意义

String.prototype.matchAll() 方法的出现,可以让我们更方便地处理字符串中的匹配问题。在以前,如果需要获取字符串中所有匹配正则表达式的子串,需要使用 match() 方法配合正则表达式的 g 标志,然后使用循环遍历返回的数组。这种方式虽然能够达到目的,但是代码可读性不高,而且不够简洁。

使用 matchAll() 方法,可以将这个过程简化为一行代码,同时还可以提高代码的可读性和可维护性。因此,我们在处理字符串匹配问题时,应该优先考虑使用 matchAll() 方法。

示例代码

下面是一个使用 matchAll() 方法的示例代码,用于统计一个字符串中所有单词出现的次数:

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

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

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

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

输出结果为:

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

可以看到,这个示例代码使用 matchAll() 方法和正则表达式,可以很方便地统计一个字符串中所有单词出现的次数。如果不使用 matchAll() 方法,这个过程可能需要写更多的代码,并且不够简洁。

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

纠错
反馈