Я багато разів використовую функцію string, matchщоб дізнатися, чи відповідає рядок звичайному виразу.
if(str.match(/{regex}/))
Чи є різниця між цим:
if (/{regex}/.test(str))
Вони, здається, дають однаковий результат?
Я багато разів використовую функцію string, matchщоб дізнатися, чи відповідає рядок звичайному виразу.
if(str.match(/{regex}/))
Чи є різниця між цим:
if (/{regex}/.test(str))
Вони, здається, дають однаковий результат?
Відповіді:
Спочатку давайте подивимося, що робить кожна функція:
regexObject . тест ( рядок )
Виконує пошук відповідності між звичайним виразом та заданим рядком. Повертає істинне або хибне .
рядок . матч ( RegExp )
Використовується для отримання відповідностей при зіставленні рядка з регулярним виразом. Повертає масив із збігами або
nullякщо таких немає.
Оскільки nullоцінює false,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Чи є якась різниця щодо продуктивності?
Так . Цю коротку замітку я знайшов на сайті MDN :
Якщо вам потрібно знати, чи відповідає рядок рядку регулярного виразу, використовуйте regexp.test (рядок).
Чи різниця значна?
Відповідь ще раз ТАК ! Цей jsPerf, який я склав, показує, що різниця становить ~ 30% - ~ 60% залежно від браузера:

Використовуйте, .testякщо хочете швидший булевий чек. Використовуйте .matchдля отримання всіх збігів при використанні gглобального прапора.
.test(). :)
Не забудьте взяти до уваги глобальний прапор у своєму regexp:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Це тому, що Regexp відстежує lastIndex, коли буде знайдено новий збіг.
.test()? Чи не сенс .test()перевіряти, чи є в рядку відповідне regexp?
Це мої результати

тест 4,267,740 ops / sec ± 1,32% (60 проб проби)
exec 3,649,719 ops / sec ± 2,51% (60 проб вибірки)
матч 3,623,125 ops / sec ± 1,85% (62 проби вибірки)
індексO 6,230,325 ops / sec ± 0,95% (62 проби вибірки)
метод тестування швидший, ніж метод відповідності, але найшвидшим методом є indexOf