初步了解 ES11 中的字符串匹配

在 ES11 中,字符串匹配得到了新的升级,主要是引入了 String.prototype.matchAll() 方法。该方法可以在一个字符串中找到所有匹配给定正则表达式的子串,并返回一个迭代器。本文将详细探讨该方法的使用和一些常见应用场景。

方法语法

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

其中,string 表示要匹配的字符串,regexp 是一个正则表达式。

方法返回值

返回的是一个迭代器,迭代器指向的是匹配到的每一个子串。迭代器的每一项都是一个数组,数组的第一项为匹配到的子串,后面的项则是该子串被捕获到的值。如果有多个匹配结果,迭代器就会包含多个数组。

示例代码

下面的代码示例演示了如何使用 String.prototype.matchAll() 方法,同时也展示了它的返回值格式。假设我们要匹配一段文本中所有的 JavaScript 函数定义,代码如下:

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

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

输出结果如下:

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

我们可以看到,输出结果是一个迭代器对象,其中包含两个匹配项。每个匹配项都是一个数组,包含了匹配到的字符串和该字符串被捕获到的值。

应用场景

提取 URL 中的参数

假设我们有一个简单的 URL,如 https://www.example.com/path?foo=bar&baz=qux,我们想从中提取出所有参数和值。我们可以使用正则表达式来匹配每个参数,然后使用 String.prototype.matchAll() 方法来提取它们。代码如下:

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

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

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

替换全部匹配项

String.prototype.replace() 方法只会替换第一个匹配项,而使用 String.prototype.matchAll() 方法则可以将字符串中所有匹配到的子串都替换掉,如下面的代码示例所示:

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

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

结论

String.prototype.matchAll() 方法是一个实用的字符串匹配工具,可以帮助我们快速地在大量文本中查找和提取特定格式的字符串。同时,它也是一个非常容易使用的 API,只需要传入正则表达式即可得到需要的结果。如果你在日常工作中需要处理大量字符串,这个方法一定能给你带来很大的帮助。

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