matchAll()
方法的语法为:
str.matchAll(regexp)
在这里, str
是一个字符串。
matchAll()参数
matchAll()
方法采用:
- 正则表达式 -正则表达式对象(参数是隐式转换为
RegExp
,如果它是一个非RegExp
对象)
注意:如果RegExp
对象没有/g
标志,则将引发TypeError
。
从matchAll()返回值
- 返回一个包含匹配项(包括捕获组)的迭代器。
注意 :返回的迭代器的每一项将具有以下附加属性:
-
groups
命名捕获组的对象,具有键作为名称,值作为捕获的匹配项。 -
index
查找结果的搜索索引。 -
input
-搜索字符串的副本。
示例1:使用matchAll()
const string = "I am learning JavaScript not Java.";
const re = /Java[a-z]*/gi;
let result = string.matchAll(re);
for (match of result) {
console.log(match);
}
输出
[
'JavaScript',
index: 14,
input: 'I am learning JavaScript not Java.',
groups: undefined
]
[
'Java',
index: 29,
input: 'I am learning JavaScript not Java.',
groups: undefined
]
在这里,使用for...of
循环对返回的迭代器进行迭代。
示例2:使用matchAll捕获组
const string = "My name is Albert. YOUR NAME is Soyuj.";
// expression matches case-insensitive "name is"+ any alphabets till period (.)
// using named capturing groups
const re = /name\sis\s(?[a-zA-Z]+)\./gi;
let found = string.matchAll(re);
for (const match of found){
console.log(`Found "${match[0]}" at index ${match.index}. Captured name = ${match.groups['name']}`)
}
输出
Found "name is Albert." at index 3. Captured name = Albert
Found "NAME is Soyuj." at index 24. Captured name = Soyuj
在这里,我们使用了正则表达式来匹配字符串的特定部分。我们可以使用matchAll()
比match()
更好地捕获比赛中的某些组。
推荐读物: JavaScript String match()