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 со строковыми литералами в качестве аргументов.
Это правило также запрещает использовать функцию-конструктор 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, правило также будет запрещать такие избыточные конструкции.
Примеры incorrect кода для { "disallowRedundantWrapping": true }
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
;
;
Примеры correct кода для { "disallowRedundantWrapping": true }
/*eslint prefer-regex-literals: ["error", {"disallowRedundantWrapping": true}]*/
/abc/;
/abc/u;
new RegExp(/abc/, flags);
Версия
Это правило добавлено в ESLint v6.4.0.
Дополнительная литература
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/prefer-regex-literals