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?
javascript
regex
performance
gdoron wspiera Monikę
źródło
źródło
Odpowiedzi:
Podstawowe użycie
Najpierw zobaczmy, co robi każda funkcja:
regexObject . test ( ciąg )
ciąg . dopasowanie ( RegExp )
Ponieważ
null
oceniafalse
,Występ
Czy jest jakaś różnica w wydajności?
Tak . Znalazłem tę krótką notatkę na stronie MDN :
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:
Wniosek
Użyj,
.test
jeśli chcesz szybciej sprawdzić wartość logiczną. Służy.match
do pobierania wszystkich dopasowań podczas korzystania zg
flagi globalnej.źródło
.test()
. :)Nie zapomnij wziąć pod uwagę flagi globalnej w wyrażeniu regularnym:
Wynika to z faktu, że Regexp śledzi lastIndex po znalezieniu nowego dopasowania.
źródło
.test()
? nie ma sensu.test()
sprawdzać, czy ciąg ma pasujące wyrażenie regularne?To są moje wyniki testów
metoda testowa jest szybsza niż metoda dopasowania, ale najszybszą metodą jest indexOf
źródło