📜  Javascript字符串matchAll()

📅  最后修改于: 2020-09-27 07:09:59             🧑  作者: Mango

JavaScript String matchAll()方法返回一个将字符串与正则表达式匹配的结果的迭代器。

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()