在ES11中,JavaScript新增了一个非常实用的字符串方法——String.prototype.matchAll()。这个方法可以用于在字符串中查找所有匹配某个正则表达式的子串,而不仅仅是第一个匹配项。本文将详细介绍这个方法的用法、示例及其指导意义。
语法
String.prototype.matchAll(regexp)
其中,regexp为一个正则表达式。
返回值
返回一个迭代器,迭代器中包含每个匹配项的详细信息。
用法
基本用法
----- --- - ------ ------- ----- ------ - ----- ----- ------- - --------------------- --- ------ ----- -- -------- - ------------------- -
输出结果:
- ---- ------ -- ------ ------ ------- ------- --------- - - ---- ------ -- ------ ------ ------- ------- --------- -
该例子中,我们在字符串 str
中查找所有匹配正则表达式 /l/g
的子串。由于正则表达式中有 g
标志,因此我们可以找到所有匹配项。使用 matchAll()
方法,我们可以得到一个迭代器,通过 for...of
循环遍历每个匹配项,并输出其详细信息。这里的详细信息包括匹配到的字符串、字符串中的位置、输入的字符串及其分组信息。
获取所有分组信息
----- --- - ------------- ----- ------ - -------------------------- ----- ------- - --------------------- --- ------ ----- -- -------- - ------------------- --------------------- --------- ---------- -
输出结果:
- ------------- ------- ----- ----- ------ -- ------ ------------- ------- --------- - ---- -- --
该例子中,我们在字符串 str
中查找所有匹配正则表达式 /(\d{4})-(\d{2})-(\d{2})/
的子串。由于正则表达式中有分组,因此我们可以获取每个匹配项的分组信息。通过 match[1]
、match[2]
、match[3]
获取每个匹配项的年、月、日信息。
处理多行字符串
----- --- - ------ ---- ------ ---- ----- ------ ----- ------ - -------------------- ----- ------- - --------------------- --- ------ ----- -- -------- - ------------------- -
输出结果:
- ------ ------ -------- ------- ------ -- ------ ------ ------------ ----------- ------ ------- --------- - - ------- ------ --------- ------- ------ --- ------ ------ ------------ ----------- ------ ------- --------- -
该例子中,我们在多行字符串 str
中查找所有匹配正则表达式 /^(\w+)\s+(\w+)$/gm
的子串。由于正则表达式中有 m
标志,因此我们可以处理多行字符串。通过 match[1]
、match[2]
获取每个匹配项的第一个单词和第二个单词。
指导意义
String.prototype.matchAll() 方法的出现,使得我们可以更加方便地处理字符串中的匹配项。这个方法返回的迭代器可以让我们逐个处理每个匹配项,获取其详细信息,以及处理分组等操作。这使得我们在处理字符串时更加高效和灵活。
总结
本文介绍了 ES11 中新增的 String.prototype.matchAll() 方法的用法、示例及其指导意义。该方法可以用于在字符串中查找所有匹配某个正则表达式的子串,而不仅仅是第一个匹配项。这个方法的出现,使得我们在处理字符串时更加高效和灵活。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/663cc691d3423812e4ab686a