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
构造函数的使用。它应该仍然用于动态生成的正则表达式。
此规则的不正确代码示例
在游乐场中打开
/*eslint prefer-regex-literals: "error"*/
;
;
;
;
;
;
;
此规则的正确代码示例
在游乐场中打开
/*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 }
的不正确代码示例
在游乐场中打开
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
;
;
{ "disallowRedundantWrapping": true }
的正确代码示例
在游乐场中打开
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
/abc/;
/abc/u;
new RegExp(/abc/, flags);
版本
此规则是在 ESLint v6.4.0 中引入的。