Много раз я использую строковую match
функцию, чтобы узнать, соответствует ли строка регулярному выражению.
if(str.match(/{regex}/))
Есть ли разница между этим:
if (/{regex}/.test(str))
Кажется, они дают одинаковый результат?
javascript
regex
performance
Гдорон поддерживает Монику
источник
источник
Ответы:
Основное использование
Во-первых, давайте посмотрим, что делает каждая функция:
regexObject . тест ( строка )
строка . матч ( RegExp )
Так как
null
оцениваетfalse
,Производительность
Есть ли разница в производительности?
Да . Я нашел эту короткую заметку на сайте MDN :
Разница значительна?
Ответ еще раз - ДА ! Этот jsPerf, который я собрал, показывает разницу ~ 30% - ~ 60% в зависимости от браузера:
Вывод
Используйте,
.test
если вам нужна более быстрая логическая проверка. Используется.match
для получения всех совпадений при использованииg
глобального флага.источник
.test()
. :)Не забудьте учесть глобальный флаг в вашем регулярном выражении:
Это потому, что Regexp отслеживает lastIndex при обнаружении нового совпадения.
источник
.test()
? Не стоит ли.test()
проверять, имеет ли строка соответствующее регулярное выражение?Это мои результаты теста
метод test быстрее метода match, но самый быстрый метод - indexOf
источник