语法错误:无效的正则表达式标志“x”

当正则表达式中的标志包含任何不属于以下标志的标志时,就会发生 JavaScript 异常 "invalid regular expression flag":dgimsuvy。如果表达式包含一个有效标志的多个实例,或者当 uv 标志一起使用时,也可能会引发此异常。

信息

SyntaxError: Invalid flags supplied to RegExp constructor 'x' (V8-based)
SyntaxError: Invalid regular expression flags (V8-based)
SyntaxError: invalid regular expression flag x (Firefox)
SyntaxError: Invalid flags supplied to RegExp constructor. (Safari)
SyntaxError: Invalid regular expression: invalid flags (Safari)

错误类型

哪里错了?

正则表达式包含无效的标志,或者在表达式中多次使用有效标志。

有效的(允许的)标志是 dgimsuvy。它们在 正则表达式 > 使用标志进行高级搜索 中有更详细的介绍。

uv 标志是互斥的,因此它们不能一起使用。您可以阅读参考资料以了解它们的差异行为。

示例

在正则表达式文字中,它由斜杠之间的模式组成,标志是在第二个斜杠之后定义的。正则表达式标志可以单独使用或组合使用,以任何顺序。此语法展示了如何使用正则表达式文字声明标志

js
const re = /pattern/flags;

它们也可以在 RegExp 对象的构造函数(第二个参数)中定义

js
const re = new RegExp("pattern", "flags");

以下是一个示例,展示了仅使用正确标志。

js
/foo/g;
/foo/gims;
/foo/uy;

以下是显示使用一些无效标志 bar 的示例

js
/foo/bar;

// SyntaxError: invalid regular expression flag "b"

以下代码是错误的,因为 Web 不是有效的标志。

js
const obj = {
  url: /docs/Web,
};

// SyntaxError: invalid regular expression flag "W"

包含两个斜杠的表达式被解释为正则表达式文字。最有可能的是,意图是创建一个字符串文字,使用单引号或双引号,如下所示

js
const obj = {
  url: "/docs/Web",
};

另请参阅