SyntaxError: raw bracket is not allowed in regular expression with unicode flag

支持 Unicode 的正则表达式模式包含未作为量词字符类一部分的原始括号({}])时,会发生 JavaScript 异常“raw bracket is not allowed in regular expression with unicode flag”。

消息

SyntaxError: Invalid regular expression: /{/u: Lone quantifier brackets (V8-based)
SyntaxError: raw bracket is not allowed in regular expression with unicode flag (Firefox)
SyntaxError: Invalid regular expression: incomplete {} quantifier for Unicode pattern (Safari)
SyntaxError: Invalid regular expression: unmatched ] or } bracket for Unicode pattern (Safari)

错误类型

SyntaxError

哪里出错了?

在不支持 Unicode 的模式下,未作为量词或字符类一部分的 {}] 被视为字面量字符。这可能会隐藏代码中的错误,因此在支持 Unicode 的模式下已弃用并禁止使用。你应该检查是否存在无效语法,或者你应该转义这些字符以进行字面量匹配。

如果 { 出现在接受量词的上下文中,则它被视为量词的开始。如果其后不是有效的量词,则会抛出另一个语法错误:不完整的量词

示例

无效案例

js
/{{MDN_Macro}}/u;
/\[sic]/u;

有效情况

js
// All { and } need to be escaped
/\{\{MDN_Macro\}\}/u;
// The ] needs to be escaped
/\[sic\]/u;

另见