在 ECMAScript 2020 中,引入了 Symbol.matchAll 方法,该方法用于返回一个字面量正则表达式对象的所有匹配项,包括捕获组和静态 / 动态的属性。
语法
RegExp.prototype[Symbol.matchAll](str)
参数
str
:要匹配的字符串。
返回值
- 返回一个迭代器(Iterator),其中包含了所有匹配的结果,每个匹配结果都是一个数组,第一个元素是匹配的字符串,后面的元素是该匹配字符串分组捕获的内容。
代码示例
下面是一个使用 Symbol.matchAll 方法的示例:
const re = /(\d{4})-(\d{2})-(\d{2})/g; const str = 'Today is 2021-08-16, tomorrow is 2021-08-17.'; const matches = str.matchAll(re); for (const match of matches) { console.log(match); }
输出结果:
[ '2021-08-16', '2021', '08', '16', index: 9, input: 'Today is 2021-08-16, tomorrow is 2021-08-17.' ] [ '2021-08-17', '2021', '08', '17', index: 30, input: 'Today is 2021-08-16, tomorrow is 2021-08-17.' ]
在这个示例中,我们使用了一个正则表达式来匹配字符串,然后使用 Symbol.matchAll 方法来获取该正则表达式匹配的所有结果。由于正则表达式中有 3 个分组,因此每个返回结果都是一个数组,其中第一个元素是匹配的字符串,后面的元素是分组匹配的结果。
注意事项
Symbol.matchAll
方法只存在于RegExp.prototype
对象上,因此只能通过实例化正则表达式对象并调用该方法来获取匹配结果。- 由于
Symbol.matchAll
方法返回一个迭代器,因此只能使用迭代器相关的方法来遍历匹配结果,如 for...of 循环、Array.from 方法等。
总结
在 ECMAScript 2020 中,Symbol.matchAll 方法为前端开发人员提供了一种更方便快捷的方法来获取正则表达式匹配的所有结果。如果您需要遍历多个匹配结果并且需要访问每个结果中的分组匹配结果,那么 Symbol.matchAll 方法是一个非常有用的技术,它可以极大地提高工作效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a8e1d3add4f0e0ff220a48