javascript - regexp - regex.test VS string.match para saber si una cadena coincide con una expresión regular
replace javascript regexp (2)
Muchas veces estoy usando la función de match
cadenas para saber si una cadena coincide con una expresión regular.
if(str.match(/{regex}/))
¿Hay alguna diferencia entre esto?
if (/{regex}/.test(str))
¿Parecen dar el mismo resultado?
Uso básico
Primero, veamos que hace cada función:
regexObject . test ( String )
Ejecuta la búsqueda de una coincidencia entre una expresión regular y una cadena especificada. Devuelve verdadero o falso .
cuerda match ( RegExp )
Se utiliza para recuperar las coincidencias cuando se hace coincidir una cadena con una expresión regular. Devuelve una matriz con las coincidencias o
null
si no hay ninguna.
Como null
evalúa como false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Actuación
¿Hay alguna diferencia con respecto al rendimiento?
Si Encontré esta breve nota en el sitio de MDN :
Si necesita saber si una cadena coincide con una expresión regular de expresiones regulares, use regexp.test (cadena).
¿Es la diferencia significativa?
¡La respuesta una vez más es SÍ ! Este jsPerf que jsPerf muestra que la diferencia es de ~ 30% - ~ 60% según el navegador:
Conclusión
Usa .test
si quieres un cheque booleano más rápido. Use .match
para recuperar todas las coincidencias cuando use la bandera global g
.
No olvide tener en cuenta la bandera global en su expresión regular:
var reg = /abc/g;
!!''abcdefghi''.match(reg); // => true
!!''abcdefghi''.match(reg); // => true
reg.test(''abcdefghi''); // => true
reg.test(''abcdefghi''); // => false <=
Esto se debe a que Regexp realiza un seguimiento del último índice cuando se encuentra una nueva coincidencia.