require-unicode-regexp
Принудительное использование флага u или v для RegExp
Некоторые проблемы, выявленные этой проверкой, можно вручную исправить с помощью предложений редактора предложений
Флаг RegExp u имеет два эффекта:
-
Обеспечение правильной обработки суррогатных пар UTF-16 в регулярных выражениях.
В особенности, синтаксис диапазонов символов получает правильное поведение.
/^[👍]$/.test("👍") //→ false /^[👍]$/u.test("👍") //→ true -
Ранняя выдача синтаксических ошибок, отключив расширения приложения B.
По историческим причинам, регулярные выражения JavaScript терпимы к синтаксическим ошибкам. Например,
/\w{1, 2/является синтаксической ошибкой, но JavaScript не выдает ошибку. Она сопоставляет строки, такие как"a{1, 2"вместо этого. Такая логика восстановления определена в приложении B.Флаг
uотключает логику восстановления, определённую приложением B. В результате, вы можете обнаруживать ошибки раньше. Это аналогично строгому режиму.
Флаг RegExp v , введённый в ECMAScript 2024, является супермножеством флага u и предлагает две дополнительные возможности:
-
Свойства Юникода строк
С помощью escape-последовательностей свойств Юникода вы можете использовать свойства строк.
const re = /^\p{RGI_Emoji}$/v; // Match an emoji that consists of just 1 code point: re.test('⚽'); // '\u26BD' // → true ✅ // Match an emoji that consists of multiple code points: re.test('👨🏾⚕️'); // '\u{1F468}\u{1F3FE}\u200D\u2695\uFE0F' // → true ✅ -
Запись в виде множества
Она позволяет выполнять операции над множествами в классах символов.
const re = /[\p{White_Space}&&\p{ASCII}]/v; re.test('\n'); // → true re.test('\u2028'); // → false
Поэтому, флаги u и v позволяют нам лучше работать с регулярными выражениями.
Подробное описание правила
Это правило призвано принуждать к использованию флага u или v для регулярных выражений.
Примеры неправильного кода для этого правила:
/*eslint require-unicode-regexp: error */
const a =
const b =
const c =
const d =
Примеры правильного кода для этого правила:
/*eslint require-unicode-regexp: error */
const a = /aaa/u
const b = /bbb/giu
const c = new RegExp("ccc", "u")
const d = new RegExp("ddd", "giu")
const e = /aaa/v
const f = /bbb/giv
const g = new RegExp("ccc", "v")
const h = new RegExp("ddd", "giv")
// This rule ignores RegExp calls if the flags could not be evaluated to a static value.
function i(flags) {
return new RegExp("eee", flags)
}
Параметры
Это правило имеет один параметр в виде объекта:
-
"requireFlag": "u"|"v"требует конкретного флага Юникода для регулярных выражений
requireFlag: “u”
Флаг u может быть предпочтительнее в средах, которые не поддерживают флаг v.
Примеры неправильного кода для этого правила с опцией { "requireFlag": "u" }:
/*eslint require-unicode-regexp: ["error", { "requireFlag": "u" }] */
const fooEmpty = ;
const fooEmptyRegexp = ;
const foo = ;
const fooRegexp = ;
Примеры правильного кода для этого правила с опцией { "requireFlag": "u" }:
/*eslint require-unicode-regexp: ["error", { "requireFlag": "u" }] */
const foo = /foo/u;
const fooRegexp = new RegExp('foo', 'u');
requireFlag: “v”
Флаг v может быть лучшим выбором, когда он поддерживается, так как он имеет больше функций, чем флаг u (например, возможность проверки свойств Юникода строк). Однако, у него более строгий синтаксис (например, необходимость экранирования определенных символов в классах символов).
Примеры неправильного кода для этого правила с опцией { "requireFlag": "v" }:
/*eslint require-unicode-regexp: ["error", { "requireFlag": "v" }] */
const fooEmpty = ;
const fooEmptyRegexp = ;
const foo = ;
const fooRegexp = ;
Примеры правильного кода для этого правила с опцией { "requireFlag": "v" }:
/*eslint require-unicode-regexp: ["error", { "requireFlag": "v" }] */
const foo = /foo/v;
const fooRegexp = new RegExp('foo', 'v');
Когда не использовать это правило
Если вы не хотите получать предупреждения о регулярных выражениях без флага u или v, то можно отключить это правило.
Версия
Это правило было введено в ESLint v5.3.0.
Дополнительные материалы
Ссылки
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/require-unicode-regexp