Molte volte sto usando la matchfunzione stringa per sapere se una stringa corrisponde a un'espressione regolare.
if(str.match(/{regex}/))
C'è qualche differenza tra questo:
if (/{regex}/.test(str))
Sembrano dare lo stesso risultato?
Molte volte sto usando la matchfunzione stringa per sapere se una stringa corrisponde a un'espressione regolare.
if(str.match(/{regex}/))
C'è qualche differenza tra questo:
if (/{regex}/.test(str))
Sembrano dare lo stesso risultato?
Risposte:
Innanzitutto, vediamo cosa fa ogni funzione:
regexObject . test ( stringa )
Esegue la ricerca di una corrispondenza tra un'espressione regolare e una stringa specificata. Restituisce vero o falso .
stringa . match ( RegExp )
Utilizzato per recuperare le corrispondenze quando si confronta una stringa con un'espressione regolare. Restituisce un array con le corrispondenze o
nullse non ce ne sono.
Poiché nullvaluta false,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
C'è qualche differenza riguardo alle prestazioni?
Sì . Ho trovato questa breve nota nel sito MDN :
Se devi sapere se una stringa corrisponde a un'espressione regolare regexp, usa regexp.test (stringa).
La differenza è significativa?
La risposta è di nuovo SÌ ! Questo jsPerf che ho messo insieme mostra che la differenza è ~ 30% - ~ 60% a seconda del browser:

Utilizzare .testse si desidera un controllo booleano più veloce. Utilizzare .matchper recuperare tutte le partite quando si utilizza la gbandiera globale.
.test(). :)
Non dimenticare di prendere in considerazione la bandiera globale nel tuo regexp:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Questo perché Regexp tiene traccia di lastIndex quando viene trovata una nuova corrispondenza.
.test()? non è il punto di .test()verificare se la stringa ha una regexp corrispondente?
Questo è il mio risultato di riferimento

test 4.267.740 ops / sec ± 1,32% (60 serie campionate)
exec 3.649.719 ops / sec ± 2,51% (60 serie campionate)
corrispondenza 3,623,125 op / sec ± 1,85% (62 serie campionate)
indice di 6.230.325 op / sec ± 0,95% (62 serie campionate)
il metodo di test è più veloce del metodo di corrispondenza, ma il metodo più veloce è indexOf