ES9 中字符串的 matchAll() 方法及其应用

ES9 中字符串的 matchAll() 方法及其应用

ES9(ECMAScript 2018)是 JavaScript 的最新标准,其中新增了一些有用的功能,如 Promise finally() 方法、正则表达式命名捕获组等。本文将介绍 ES9 中新增的字符串方法 matchAll() 及其应用。

matchAll() 方法

matchAll() 方法返回一个迭代器对象,它包含了字符串中所有匹配正则表达式的结果。该方法只接受正则表达式作为参数,不支持字符串。

语法:

str.matchAll(regexp)

其中,str 为要进行匹配的字符串,regexp 为正则表达式。

matchAll() 方法返回的迭代器对象包含多个结构相同的匹配对象,每个对象都有以下属性:

  • 0: 匹配到的完整字符串。
  • 1: 第一个捕获组的匹配值。
  • 2: 第二个捕获组的匹配值。
  • index: 匹配到的字符串在原字符串中的索引。
  • input: 原字符串。

使用方法:

const str = "abc123def456ghi789";
const regExp = /[a-z]+(\d+)/g;

const result = str.matchAll(regExp);

for (const match of result) {
  console.log(match[1], match.index);
}

输出结果为:

"123" 3
"456" 9
"789" 15

示例代码中,首先定义字符串 str 和正则表达式 regExp,接着使用 matchAll() 方法对 str 进行匹配,将匹配结果存储在 result 中,并遍历 result 中的每一个匹配对象,输出捕获组 1 的值和匹配的起始位置。

matchAll() 方法的应用

matchAll() 方法可以方便地对复杂的字符串进行处理,例如从 Markdown 格式文本中提取全部图片URL地址。

示例代码:

const markdown = `
# JavaScript进阶
Blackandyellow 精心创作,更多前端文章欢迎关注哦

#
ES9(ECMAScript 2018)是 JavaScript 的最新标准,其中新增了一些有用的功能,如 Promise finally() 方法、正则表达式命名捕获组等。本文将介绍 ES9 中新增的字符串方法 matchAll() 及其应用。

![图片1](https://example.com/img1.jpg)

![图片2](https://example.com/img2.jpg)

![图片3](https://example.com/img3.jpg)

`;

const imageRegEx = /!\[[^\]]*\]\((.*?)\)/g;

const imageUrls = [];

for (const match of markdown.matchAll(imageRegEx)) {
  imageUrls.push(match[1]);
}

console.log(imageUrls);

输出结果为:

["https://example.com/img1.jpg", "https://example.com/img2.jpg", "https://example.com/img3.jpg"]

示例代码中,首先定义了一个 Markdown 文本字符串 markdown,接着使用正则表达式 imageRegEx 捕获其中的所有图片URL地址。然后,使用 matchAll() 方法对 markdown 进行匹配,并将匹配的所有图片 URL 地址存储在数组 imageUrls 中。最后,输出数组 imageUrls

总结

本文介绍了 ES9 中字符串方法 matchAll() 及其应用。matchAll() 方法可以方便地对复杂的字符串进行处理,值得前端开发者们在代码中使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658fc3b4eb4cecbf2d558428


纠错
反馈