Я багато разів використовую функцію 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