现在缺少 g 标志时 matchAll 会引发错误吗?

Dav*_*ann 10 javascript regex google-chrome

从 MDN 文档中它指出

如果缺少 g 标志,matchAll 仅返回第一个匹配项。

但是如果你运行这段代码:

const regexp = RegExp('[a-c]', '');
const str = 'abc';
console.log(Array.from(str.matchAll(regexp), m => m[0]));
// Array [ "a" ]
Run Code Online (Sandbox Code Playgroud)

在最新版本的 chrome 中,您会收到以下错误:

错误:使用非全局 RegExp 参数调用 undefineds

我在 chrome 版本 80.0.3987.116

我不确定这是 chrome 问题还是 MDN 文档需要更新。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll

zfr*_*sch 16

在这种情况下,在 MDN 上提供给您的信息是错误的。

截至 2020 年 2 月 15 日的官方 ECMA 规范ECMA-262请参阅此处)指出,如果不存在g标志,matchAll则应抛出TypeError

具体参见下面的2.b.iii


匹配所有 MDN


错误消息显然与其措辞相当混乱,但仍然是正确的。