Что-то, что часто делается во фронтенд-разработке, это проверка того, соответствует ли строка какому-то шаблону или содержит какую-то подстроку. Объект String в Javascript предоставляет для этого несколько удобных методов: match, search, indexOf и lastIndexOf. (Конечно, если вы хотите проверить, что строка точно соответствует другой строке, ничто не сравнится с простым старым оператором ===.) Альтернативой использованию методов String является использование метода test из RegExp. При этом производительность не снижается по сравнению с match и search, поскольку они неявно преобразуют свои аргументы в регулярные выражения.

Однако основным преимуществом использования test вместо match является надежность. Строка, которую вы тестируете, обычно является ненадежной переменной: она исходит от пользовательского ввода или ответа API. Если эта переменная должна быть undefined или null вместо строки, то match вызовет ошибку во время выполнения. Однако, если вместо этого вы использовали test из RegExp, то проверка возможного неопределенного или нулевого значения просто вернет false. Когда вы пишете код для проверки строки, вы, как правило, жестко кодируете регулярное выражение, поэтому во время выполнения известно, что оно существует, а строка — нет.

Динамические регулярные выражения

Что, если регулярное выражение создается во время выполнения? Предположим, вы написали этот код, чтобы проверить, есть ли у пользователя учетная запись электронной почты с вами:

email.match(`${username}@myDomain.com`);

Как вы могли написать это как регулярное выражение?

Так же, как match делает неявно: используя объект RegExp вместо создания литерала регулярного выражения.

RegExp(`${username}@myDomain.com`).test(email);

Вывод

Если вы хотите устранить ошибки времени выполнения из-за вызова match для нулевых или неопределенных переменных, начните писать свои проверки регулярных выражений сначала с регулярным выражением, используя test. Он намного надежнее и по-прежнему легко читается.