JavaScript:match() 和 matchAll() 之间的区别

如果可以实现记得点赞分享,谢谢老铁~

在这里插入图片描述

String.prototype.match()

String.prototype.match() 是 JavaScript 中的一种方法,它返回与正则表达式匹配字符串的结果数组。

返回的结果在很大程度上取决于使用 global(g) 标志。如果使用 ag 标志,我们将获得所有结果,但不捕获组。

const str = "ReguralExpresion RegExr";
const regex = /E(x)([a-z])/g;
const match = str.match(regex); //Array ["Exp", "Exr"]

另一方面,如果我们不使用 g 标志,我们将仅获得第一个完整的匹配项,但具有相关的捕获组。

const str = "ReguralExpresion RegExr";
const regex = /E(x)([a-z])/;
const match = str.match(regex); //Array ["Exp", "x", "p"]

String.prototype.matchAll()

这就是 matchAll() 的用武之地。 String.prototype.matchAll() 返回一个迭代器,该迭代器根据正则表达式返回所有匹配的组,包括捕获组。matchAll() 的主要原因之一是改进了对捕获组的访问。

const str = "ReguralExpresion RegExr";
const regex = /E(x)([a-z])/g;
const match = str.matchAll(regexp);
Array.from(match, (res) => console.log(res));
//Array ["Exp", "x", "p"]
//Array ["Exr", "x", "r"]

迭代器为每次匹配生成一个数组,因此它也适用于 for…of 循环。

const str = "ReguralExpresion RegExr";
const regex = /E(x)([a-z])/g;
const match = str.matchAll(regex);
for (const m of match) {
  console.log(m);
}
//Array ["Exp", "x", "p"]
//Array ["Exr", "x", "r"]

matchAll()的正则表达式需要有ag标志,否则会抛出错误。

const str = "ReguralExpresion RegExr";
const regex = /E(x)([a-z])/;
const match = str.matchAll(regex);
//Error: String.prototype.matchAll called with a non-global RegExp argument

如果没有匹配项,则 match() 方法返回 null。

const str = "ReguralExpresion RegExr";
const regex = /E(m)([a-z])/g;
const match = str.match(regex); //null

同一示例中的 matchAll() 方法返回一个空的可迭代对象。

const str = "ReguralExpresion RegExr";
const regex = /E(m)([a-z])/g;
const match = str.matchAll(regex); //Object {  }

结论

正如我们所看到的,match() 和 matchAll() 之间的差异并不小,这意味着 matchAll() 绝不可以被视为 match() 的替代品。

String.prototype.matchAll() 是 ES2020 中的一个新功能,它处于最后的第 4 阶段。不过,对于某些浏览器,您将需要使用 polyfill。您可以使用 Babel 或npm 包

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端加油站

你遇到的坑将由我来踩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值