
prefer-regex-literals
禁止使用 RegExp
构造函数,推荐使用正则表达式字面量
💡 hasSuggestions
此规则报告的一些问题可以通过编辑器 建议 手动修复
有两种方法可以创建正则表达式
- 正则表达式字面量,例如,
/abc/u
。 RegExp
构造函数,例如,new RegExp("abc", "u")
或RegExp("abc", "u")
。
当您想要动态生成模式时,构造函数特别有用,因为它接受字符串参数。
当将构造函数与字符串字面量一起使用时,请不要忘记字符串转义规则仍然适用。 如果你想在模式中放置一个反斜杠,你需要在字符串字面量中转义它。 因此,以下是等效的
new RegExp("^\\d\\.$");
/^\d\.$/;
// matches "0.", "1.", "2." ... "9."
在上面的例子中,正则表达式字面量更容易阅读和理解。 此外,在字符串字面量中省略额外的 \
是一个常见的错误,这会产生一个完全不同的正则表达式
new RegExp("^\d\.$");
// equivalent to /^d.$/, matches "d1", "d2", "da", "db" ...
当正则表达式是预先知道的时,最佳实践是避免在正则表达式表示法之上使用字符串字面量表示法,并使用正则表达式字面量而不是构造函数。
规则详情
此规则禁止使用 RegExp
构造函数,并使用字符串字面量作为其参数。
此规则还禁止将 RegExp
构造函数与不带表达式的模板字面量和不带表达式的 String.raw
标记模板字面量一起使用。
该规则并非禁止所有 RegExp
构造函数的使用。 它仍然应该用于动态生成的正则表达式。
此规则的 错误 代码示例
在 Playground 中打开
/*eslint prefer-regex-literals: "error"*/
;
;
;
;
;
;
;
此规则的 正确 代码示例
在 Playground 中打开
/*eslint prefer-regex-literals: "error"*/
/abc/;
/abc/u;
/\d\d\.\d\d\.\d\d\d\d/;
/^\d\.$/;
// RegExp constructor is allowed for dynamically generated regular expressions
new RegExp(pattern);
RegExp("abc", flags);
new RegExp(prefix + "abc");
RegExp(`${prefix}abc`);
new RegExp(String.raw`^\d\. ${suffix}`);
选项
此规则有一个对象选项
disallowRedundantWrapping
设置为true
会额外检查不必要地包装的正则表达式字面量(默认为false
)。
disallowRedundantWrapping
默认情况下,当正则表达式字面量不必要地包装在 RegExp
构造函数调用中时,此规则不会检查。 当选项 disallowRedundantWrapping
设置为 true
时,该规则还将禁止此类不必要的模式。
{ "disallowRedundantWrapping": true }
的 错误
代码示例
在 Playground 中打开
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
;
;
{ "disallowRedundantWrapping": true }
的 正确
代码示例
在 Playground 中打开
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
/abc/;
/abc/u;
new RegExp(/abc/, flags);
版本
此规则在 ESLint v6.4.0 中引入。
延伸阅读

