Пишите код сознательно и выбирайте подходящий инструмент для работы

JavaScript предлагает нам несколько методов проверки строк на наличие шаблонов, в первую очередь для объектов RegExp и String. Эта статья призвана выделить два метода, которые, как я вижу, используются для проверки строк на наличие шаблонов, как они могут быть использованы не по назначению и как их можно использовать надлежащим образом.

RegExp.prototype.test ()

String.prototype.match ()

Предполагается, что вы понимаете, что такое регулярные выражения, как определять их значение и когда их целесообразно использовать.

Проблема: Напишите функцию, которая принимает строку и шаблон в качестве входных данных и печатает «Образец найден», если образец найден в строке, и «Образец не найден» в противном случае.

Несмотря на то, что замаскировано простотой и, возможно, даже тривиальностью, разработчики часто сталкиваются с проблемами, аналогичными этой - проблемой, при которой мы должны проверить, содержит ли строка определенный шаблон, и написать код, который выполняет одно действие, когда шаблон найден, и предпринимает другие действия, когда узор отсутствует в строке. Мы сталкиваемся с этой проблемой так часто, что разрабатываем решение, готовое к немедленному извлечению из нашего левого полушария.

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

Решение №1

function testStrForPattern(str, pattern) {
  if (str.match(pattern)) {
    return console.log("Pattern Found");
  }
  return console.log("Pattern Not Found");
}
const sentence = "We write JavaScript code for people!";
testStrForPattern(sentence, /javascript|code/i);
// Output: "Pattern Found"
testStrForPattern(sentence, /php|web/i);
// Output: "Pattern Not Found"

Решение №2

function testStrForPattern(str, pattern) {
  if (pattern.test(str)) {
    return console.log("Pattern Found");
  }
  return console.log("Pattern Not Found");
}
const sentence = "We write JavaScript code for people!";
testStrForPattern(sentence, /javascript|code|web/i);
// Output: "Pattern Found"
testStrForPattern(sentence, /php|web/i);
// Output: "Pattern Not Found"

Выберите подходящий инструмент для работы

«Выберите подходящий инструмент для работы» - это предложение, которое мы часто слышим в промышленности, и я подозреваю, что многие из нас действительно стараются его соблюдать. Я слышу, что это предложение наиболее часто используется при обращении к макрорешениям проблемы, например, при использовании соответствующего программного пакета или при выборе подходящей методологии разработки программного обеспечения. Теперь я даю ту же рекомендацию, чтобы выбрать правильный инструмент для работы на микроуровне (в коде), потому что это тоже имеет значение.

String.prototype.match ()

str.match(pattern)

Если строка соответствует выражению, она вернет Array, содержащий всю совпавшую строку в качестве первого элемента, за которым следуют любые результаты, записанные в круглых скобках. Если совпадений не было, возвращается null.

RegExp.prototype.test ()

pattern.test(str)

Возвращает true, если есть совпадение между регулярным выражением и указанной строкой; в противном случае false.

Первое решение работает, потому что, если шаблон найден, возвращаемый массив будет оцениваться как true в операторе if и false, когда возвращается null из-за отсутствия шаблона в строке.

Однако match не был разработан для простой и эффективной проверки наличия в строке шаблона. Предвидя неправомерное использование match, документов Сети разработчиков Mozilla,

Если вам нужно узнать, соответствует ли строка регулярному выражению RegExp, используйте RegExp.test()

Наконец, мы можем догадаться, что match работает медленнее, чем test. Только представьте, что делается дополнительная работа по созданию массива всех совпавших подстрок, а не по возврату единственного значения при первом совпадении. Все еще не верите? Посмотрите, насколько test быстрее, чем match здесь. Это намного быстрее!

Заключительные слова

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

Если вы узнали что-то новое или вам понравилось читать эту статью, хлопайте в ладоши 👏 и поделитесь ею, чтобы это увидели другие. Не стесняйтесь оставлять комментарии!