SyntaxError: invalid regular expression flag "x"

当正则表达式中的标志包含任何非以下标志的标志时,JavaScript 就会抛出“无效的正则表达式标志”异常: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)

错误类型

SyntaxError

哪里出错了?

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

有效的(允许的)标志是 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",
};

另见