在 ECMAScript 2020 中,matchAll 方法是一个新功能,它可以匹配一个字符串的所有符合条件的子串,并返回一个迭代器。本篇文章将介绍 matchAll 方法的详细使用方法以及它应用的场景。
matchAll 方法是什么?
matchAll 方法是 String.prototype 对象上新增的一个方法,它允许我们对一个字符串进行全局正则匹配,并在匹配结果中返回所有匹配项,这些匹配项可以通过迭代器遍历使用。当我们想要搜索一个长字符串中的所有匹配项时,这个方法非常实用。
matchAll 方法的使用形式如下:
str.matchAll(regexp)
其中,str 是要匹配的字符串,regexp 是一个正则表达式对象。
例子
下面是一个简单的例子,用来说明 matchAll 方法的基本使用。
const str = 'hello world'; const regexp = /l/g; const matches = str.matchAll(regexp); for (const match of matches) { console.log(match); }
在这个例子中,我们所要做的就是匹配 str 字符串中所有的小写字母 "l"。
我们首先创建了一个正则表达式对象,这个对象包含了一个匹配字符 "l" 的全局模式( g 标志符表示全局模式)。接下来,我们调用了 matchAll 方法,并传入了这个正则表达式对象。
最后,我们使用一个 for...of 循环,遍历了 matchAll 方法的输出对象。matchAll 方法返回的对象是一个迭代器,因此我们可以通过 for...of 循环来访问其中的每一个元素,每个元素都是一个数组,包含了整个匹配项以及其相关的属性,如匹配位置、输入字符串等等。
matchAll 的返回值
matchAll 方法返回一个迭代器。迭代器的每个值都是一个数组,包含了整个匹配项以及其相关的属性。
如果匹配失败,该方法将返回一个空的迭代器。
迭代器的属性
每次迭代产生的数组,其中包含了整个匹配项以及其相关的属性。这些属性包括:
- match:整个匹配项的字符串。
- groups:匹配项的具名捕获组。
- index:匹配项在输入字符串中的起始位置。
- input:原始输入字符串。
实战场景
现在我们来看看在实际的开发中 matchAll 方法的应用场景。
例如,我们需要从一段文本中检索出所有的日期字符串,以便我们对这些日期进行进一步的处理。在这种情况下, matchAll 方法非常实用。
const text = 'This is a sample text, it contains multiple dates: 01/10/2022, 02/12/2022, 03/15/2022'; const regexp = /\d{2}\/\d{2}\/\d{4}/g; const dates = Array.from(text.matchAll(regexp), m => m[0]); console.log(dates);
在这个例子中,我们定义了一个字符串 text,这个字符串包含了多个日期字符串,包括 01/10/2022、02/12/2022、03/15/2022。
接下来,我们创建了一个正则表达式对象,这个对象用来匹配 日期格式的字符串(如 DD/MM/YYYY)。
然后,我们调用了 matchAll 方法,并传入了这个正则表达式对象。这个方法返回了一个迭代器,我们通过 Array.from() 方法将这个迭代器转换成一个数组。
为了获取每个日期字符串,我们提供了一个映射函数,该函数接受每个匹配项作为输入,并返回匹配项的第一个元素。
最后,我们打印出了结果数组。
总结:
matchAll 方法是 ECMAScript 2020 新增的功能之一,它可以让我们执行全局正则表达式匹配,并返回所有匹配项。本文提供了 matchAll 方法的基本使用形式,并且给出了一个实际的场景,用来说明它的应用场景。在实际开发中,该方法不仅可以帮助我们提高开发效率,而且可以让我们更好地处理文本数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6549e3947d4982a6eb4193e1