ECMAScript 2018 中的 String.prototype.matchAll
方法使用详解
ECMAScript 2018 是一套新的 JavaScript 标准,其中包含了一些新的方法和特性。其中,String.prototype.matchAll
是一个非常实用的新增方法。本文就来详细介绍一下这个方法的使用。
什么是 String.prototype.matchAll
String
对象的 matchAll
方法是 ECMAScript 2018 标准中新增的一个方法。它返回一个迭代器,包含了所有与正则表达式匹配的子串及其相关信息。
这个方法将返回一个迭代器,我们可以在其上使用 for...of
循环进行遍历,来逐个获取匹配到的子串。
String.prototype.matchAll
方法的基本语法如下:
str.matchAll(regexp)
其中,regexp
是一个正则表达式对象,用来匹配 str
中的子串。
使用 String.prototype.matchAll
使用 matchAll
方法需要满足两个条件:
- 该方法只能在字符串对象上调用,不能对一个单独的字符串调用。
- 该方法只能使用正则表达式来进行匹配,不能使用字符串。
下面,我们来看一些示例代码,来帮助理解 String.prototype.matchAll
方法的使用。
示例一
const str = 'hello world, world!' const regex = /w\w+d/g for (const match of str.matchAll(regex)) { console.log(match) }
输出结果:
["world", index: 6, input: "hello world, world!"] ["world", index: 14, input: "hello world, world!"]
通过正则表达式和 String.prototype.matchAll
方法,我们可以找到 str
中所有的 w
开头、d
结尾的字符串。输出结果中的第一个元素包含了匹配到的字符串、匹配到的位置以及原始的字符串。
示例二
const str = 'foofoofoo' const regex = /foo/g const matches = [...str.matchAll(regex)] console.log(matches.map(match => match.index))
输出结果:
[0, 3, 6]
这个例子中,我们使用 ...
运算符将迭代器转为数组,然后使用 map
方法来获取每次匹配的位置。
示例三
const str = 'abc' const regex = /d/ const result = str.matchAll(regex) console.log(Array.from(result))
输出结果:
[]
在本示例中,因为 str
中没有匹配到 d
,所以通过 matchAll
方法返回的迭代器是空的。
总结
String.prototype.matchAll
方法是一个非常实用的 JavaScript 新方法。它可以用来查找字符串中所有匹配的子串及其相关信息,有很多场景都可以用到,例如搜索、解析等等。当然,使用它的前提是必须熟悉正则表达式的语法和使用方法。
希望本文对您对 String.prototype.matchAll
方法的使用有更好的理解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d47bbfb5eee0b525c05f43