JavaScript matchAll() 语法
matchAll() 是 JavaScript 字符串的一个方法,它用于查找字符串中是否存在符合条件的子串。它会返回一个可迭代对象(RegExp String Iterator),该可迭代对象包含所有匹配项的信息。
语法:
str.matchAll(regexp)说明:
matchAll() 方法接收单个参数。
regexp(必选):是一个正则表达式,必须带全局标志 “g” 。- 如果 regexp 没有 “g” 标志,则 matchAll() 会抛出 TypeError 错误。“g” 标志,则 matchAll() 会抛出 TypeError 错误。
- 如果 regexp 是一个非 RegExp 对象,它会隐式地使用 new RegExp(regexp, "g") 将其转换为带有 “g” 标志的正则表达式。
matchAll() 方法非常适合在需要遍历所有匹配项,并且需要获取每个匹配项的详细信息(如捕获组、索引)时使用。
JavaScript matchAll() 摘要
| 属于 | JavaScript 查找字符串 |
|---|---|
| 使用频率 | 中 |
| 修改原字符串 | 否 |
| 官方文档 | 查看 |
| MDN | 查看 |
JavaScript matchAll() 示例
接下来,我们通过几个简单的例子来讲解一下 JavaScript matchAll() 方法是如何使用的。
示例 1:matchAll() 参数是一个字符串
const str = "My favorite fruits are apple, banana and pear";
const result = str.matchAll("apple");
console.log(result);运行结果如下。
Object [RegExp String Iterator] {}分析:
当参数是一个字符串时,matchAll() 会将其转换为一个正则表达式对象(带 “g” 标志)。对于这个例子来说,str.matchAll("apple") 等价于 str.match(/apple/g)。
matchAll() 返回的是一个可迭代对象,我们可以使用 for...of 语句遍历它。
const str = "My favorite fruits are apple, banana and pear";
const result = str.matchAll("apple");
for (let item of result) {
console.log(item);
}运行结果如下。
[
'apple',
index: 23,
input: 'My favorite fruits are apple, banana and pear',
groups: undefined
]示例 2:matchAll() 参数是一个正则表达式
const str = "My number is 020-666666 or 020-888888";
const result = str.matchAll(/\d{3}-\d{6}/g);
for (let item of result) {
console.log(item);
}运行结果如下。
[
'020-666666',
index: 13,
input: 'My number is 020-666666 or 020-888888',
groups: undefined
]
[
'020-888888',
index: 27,
input: 'My number is 020-666666 or 020-888888',
groups: undefined
]分析:
当 matchAll() 参数是一个正则表达式时,必须结合 “g” 标志。如果不使用 “g” 标志,则会直接报错,小伙伴们可以自行试一下。
matchAll() 与 match() 的区别
matchAll() 和 match() 这两个方法都可以用于查找字符串中所有符合条件的子串,它们之间的区别如下。
- 默认情况下,matchAll() 会返回所有匹配项,而 match() 只会返回第一个匹配项。
- matchAll() 返回的是一个可迭代对象(Iterator),而 match() 返回的是一个数组。
