ES12 中 String 的新方法:matchAll() 的应用及技巧

阅读时长 4 分钟读完

在 ES12 中引入了一个新的 String 方法 matchAll(),它能够返回一个迭代器,遍历字符串中匹配某个正则表达式的所有结果。这个方法能够极大地简化字符串的处理和分析。

基本用法

matchAll() 方法用法和 match() 方法类似,但是前者返回的是一个迭代器对象,方便我们遍历所有匹配结果,而后者只返回第一个匹配结果。

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

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

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

使用迭代器也可以实现上述目的:

更进阶的使用

使用 lastIndex 属性

正则对象在匹配字符串的过程中,有个重要的属性 lastIndex,它表示匹配下一个字符的位置。使用 match() 方法时,如果正则对象中包含了全局修饰符 g,那么每一次调用 match() 方法时,lastIndex 属性值就会改变。

matchAll() 方法同样遵循这个规则,返回的迭代器对象也会受到 lastIndex 属性的影响。因此,如果想要遍历完整个字符串,需要每次手动设置 lastIndex 属性为 0。

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

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

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

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

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

记录匹配位置和输入字符串

迭代器对象中的每个元素都是一个数组,包含了匹配的字符串及其位置和输入字符串,可以通过数组解构获取这些信息。

处理捕获组

正则表达式中的捕获组是指放在圆括号中的子表达式,可以使用 matchAll() 方法来对捕获组进行处理。

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

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

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

结论

ES12 中新加入的 matchAll() 方法是一种强大而灵活的字符串处理工具,可以大大简化字符串的分析和处理。它通过返回迭代器对象,提供了更多的操作空间,比如处理匹配结果位置、输入字符串和捕获组等信息。但需要注意的是,在使用过程中要注意 lastIndex 属性的影响。

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

纠错
反馈