Oft verwende ich die Zeichenfolgenfunktion match
, um festzustellen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.
if(str.match(/{regex}/))
Gibt es einen Unterschied zwischen diesen:
if (/{regex}/.test(str))
Sie scheinen das gleiche Ergebnis zu geben?
javascript
regex
performance
Gdoron unterstützt Monica
quelle
quelle
Antworten:
Grundlegende Verwendung
Lassen Sie uns zunächst sehen, was jede Funktion tut:
regexObject . test ( String )
Zeichenfolge . Übereinstimmung ( RegExp )
Da
null
bewertet zufalse
,Performance
Gibt es einen Leistungsunterschied?
Ja . Ich habe diese kurze Notiz auf der MDN-Site gefunden :
Ist der Unterschied signifikant?
Die Antwort lautet noch einmal JA ! Diese von mir zusammengestellte jsPerf zeigt, dass der Unterschied je nach Browser ~ 30% - ~ 60% beträgt :
Fazit
Verwenden
.test
Sie diese Option, wenn Sie eine schnellere boolesche Prüfung wünschen. Verwenden Sie.match
diese Option , um alle Übereinstimmungen abzurufen, wenn Sie dasg
globale Flag verwenden.quelle
.test()
. :)Vergessen Sie nicht, die globale Flagge in Ihrem regulären Ausdruck zu berücksichtigen:
Dies liegt daran, dass Regexp den lastIndex verfolgt, wenn eine neue Übereinstimmung gefunden wird.
quelle
.test()
?.test()
Ist es nicht sinnvoll zu prüfen, ob der String einen passenden regulären Ausdruck hat?Dies ist mein Benchmark-Ergebnis
Die Testmethode ist schneller als die Match-Methode, aber die schnellste Methode ist der indexOf
quelle