
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
建構函式的使用。
此規則也禁用將不帶表達式的樣板字面值和不帶表達式的 String.raw
標籤樣板字面值用於 RegExp
建構函式。
此規則並非禁用所有 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}`);
選項
此規則有一個物件選項
- 設定為
true
的disallowRedundantWrapping
會額外檢查不必要地包裝的正規表示式字面值(預設為false
)。
disallowRedundantWrapping
預設情況下,當正規表示式字面值不必要地包裝在 RegExp
建構函式呼叫中時,此規則不會檢查。當選項 disallowRedundantWrapping
設定為 true
時,此規則也將禁用此類不必要的模式。
{ "disallowRedundantWrapping": true }
的 incorrect
程式碼範例
在 Playground 中開啟
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
;
;
{ "disallowRedundantWrapping": true }
的 correct
程式碼範例
在 Playground 中開啟
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
/abc/;
/abc/u;
new RegExp(/abc/, flags);
版本
此規則在 ESLint v6.4.0 中引入。
延伸閱讀

