
prefer-regex-literals
禁止使用 RegExp
建構子,而改用正規表示式字面值
💡 有建議
此規則報告的一些問題可以透過編輯器的建議手動修正
有兩種方法可以建立正規表示式
- 正規表示式字面值,例如
/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
建構函式。
此規則也禁止使用不含表達式的樣板字面值以及不含表達式的 String.raw
標籤樣板字面值的 RegExp
建構函式。
此規則並非禁止所有 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 }
的 incorrect
程式碼範例
在遊樂場開啟
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
;
;
適用於 { "disallowRedundantWrapping": true }
的 correct
程式碼範例
在遊樂場開啟
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
/abc/;
/abc/u;
new RegExp(/abc/, flags);
版本
此規則在 ESLint v6.4.0 中引入。
延伸閱讀

