在 ECMAScript 2018 中,JavaScript 添加了一个新的字符串方法:String.prototype.matchAll。matchAll 方法允许您使用正则表达式来在字符串中查找所有的匹配,返回一个迭代器对象,该对象包含具有匹配信息的每个匹配项。
matchAll 方法概述
matchAll 方法是用于查找字符串中所有与正则表达式相匹配的子串的字符串方法。返回的迭代器对象包含多个迭代器结果,每个结果都是一个包含匹配字符串和捕获组结果的数组。
下面是 matchAll 方法的语法:
string.matchAll(regexp);
其中,regexp 是一个正则表达式,用于匹配字符串。
示例
让我们来看一个简单的示例,使用 matchAll 方法查找字符“o”在字符串中的所有匹配项:
const str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; const regExp = /o/g; const matches = str.matchAll(regExp); for (const match of matches) { console.log(match); }
运行以上代码,输出结果如下:
["o", index: 1, input: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", groups: undefined] ["o", index: 11, input: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", groups: undefined] ["o", index: 20, input: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", groups: undefined] ["o", index: 26, input: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", groups: undefined]
从输出结果可以看出,matchAll 方法返回一个迭代器对象,包含多个匹配项。每个匹配项都是一个数组,包含匹配的子串和捕获组结果。
捕获组
matchAll 方法也支持捕获组的使用。下面是一个演示如何使用捕获组的示例:
const str = 'Hello World! How are you?'; const regExp = /(\w+)\s(\w+)/g; const matches = str.matchAll(regExp); for (const match of matches) { console.log(match); }
输出结果如下:
["Hello World", "Hello", "World", index: 0, input: "Hello World! How are you?", groups: undefined] ["How are", "How", "are", index: 13, input: "Hello World! How are you?", groups: undefined]
从输出结果可以看出,每个匹配项都包含了两个捕获组的结果,第一个捕获组是单词字符,第二个捕获组是关键字。
迭代器
matchAll 方法返回的是一个迭代器对象,可以很方便的使用迭代器相关的操作。例如,你可以使用 for 循环或者 forEach 方法来遍历迭代器所返回的迭代器结果。
以下示例演示了如何使用 forEach 方法遍历迭代器对象所返回的迭代器结果:
const str = 'My name is John. I am 29 years old. I live in London.'; const regExp = /(\w+)\s(is)\s(\w+)/g; str.matchAll(regExp).forEach(match => { console.log(match); });
输出结果如下:
["name is John", "name", "is", "John", index: 3, input: "My name is John. I am 29 years old. I live in London.", groups: undefined] ["am 29 years", "am", "29", "years", index: 17, input: "My name is John. I am 29 years old. I live in London.", groups: undefined] ["live in London", "live", "in", "London", index: 41, input: "My name is John. I am 29 years old. I live in London.", groups: undefined]
指导意义
matchAll 方法是一个非常有用的字符串方法,它可以在查找匹配时方便地执行一些操作,如使用捕获组来提取所需的部分。由于 matchAll 方法是一个迭代器,因此您可以在使用 for 循环或 forEach 方法时非常方便地遍历结果。
在某些情况下,您可能仍然需要使用 String.prototype.match 方法来查找位于字符串中的第一个匹配项。但是,如果您需要查找字符串中所有匹配项的出现次数以及它们的位置和内容,则 matchAll 方法是一个更好的选择。
matchAll 方法为 JavaScript 开发人员提供了一种更强大的方法来处理字符串,使得在进行大量文本分析时变得更加容易。
结论
在本文中,我们深入了解了 ES9 中新增的 String.prototype.matchAll 方法。我们看到了如何使用正则表达式,以及如何使用捕获组来提取所需的内容。我们还将看到如何使用迭代器来轻松遍历 matchAll 返回的结果。
此外,我们也讨论了 matchAll 方法的使用场景,并 和大家一起讨论了它的指导意义。随着更多开发人员在处理 JavaScript 字符串方面越来越自如,matchAll 方法可以使我们更加轻松地处理任何文本数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/673476c90bc820c58249430b