Wiele razy używam match
funkcji string, aby sprawdzić, czy łańcuch pasuje do wyrażenia regularnego.
if(str.match(/{regex}/))
Czy jest jakaś różnica między tym:
if (/{regex}/.test(str))
Wydają się dawać ten sam wynik?
Wiele razy używam match
funkcji string, aby sprawdzić, czy łańcuch pasuje do wyrażenia regularnego.
if(str.match(/{regex}/))
Czy jest jakaś różnica między tym:
if (/{regex}/.test(str))
Wydają się dawać ten sam wynik?
Odpowiedzi:
Najpierw zobaczmy, co robi każda funkcja:
regexObject . test ( ciąg )
Wykonuje wyszukiwanie dopasowania między wyrażeniem regularnym a określonym ciągiem. Zwraca true lub false .
ciąg . dopasowanie ( RegExp )
Służy do wyszukiwania dopasowań podczas dopasowywania łańcucha do wyrażenia regularnego. Zwraca tablicę z dopasowaniami lub
null
jeśli nie ma żadnych.
Ponieważ null
ocenia false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Czy jest jakaś różnica w wydajności?
Tak . Znalazłem tę krótką notatkę na stronie MDN :
Jeśli chcesz wiedzieć, czy ciąg pasuje do wyrażenia regularnego regexp, użyj regexp.test (string).
Czy różnica jest znacząca?
Odpowiedź jeszcze raz brzmi TAK ! To zestawienie jsPerf pokazuje, że różnica wynosi ~ 30% - ~ 60% w zależności od przeglądarki:
Użyj, .test
jeśli chcesz szybciej sprawdzić wartość logiczną. Służy .match
do pobierania wszystkich dopasowań podczas korzystania z g
flagi globalnej.
.test()
. :)
Nie zapomnij wziąć pod uwagę flagi globalnej w wyrażeniu regularnym:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Wynika to z faktu, że Regexp śledzi lastIndex po znalezieniu nowego dopasowania.
.test()
? nie ma sensu .test()
sprawdzać, czy ciąg ma pasujące wyrażenie regularne?
To są moje wyniki testów
test 4,267,740 operacji / sek ± 1,32% (próbka 60 prób)
exec 3,649,719 operacji / s ± 2,51% (próbka 60 przebiegów)
dopasuj 3,623,125 operacji / sek ± 1,85% (próbka 62 przebiegów)
indeks 6,230,325 operacji / sek ± 0,95% (próbkowanie 62 przebiegów)
metoda testowa jest szybsza niż metoda dopasowania, ale najszybszą metodą jest indexOf