在 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