Muchas veces estoy usando la match
función de cadena 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?
Muchas veces estoy usando la match
función de cadena 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?
Respuestas:
Primero, veamos qué hace cada función:
regexObject . prueba ( cadena )
Ejecuta la búsqueda de una coincidencia entre una expresión regular y una cadena especificada. Devuelve verdadero o falso .
cadena . partido ( RegExp )
Se usa para recuperar las coincidencias al hacer coincidir una cadena con una expresión regular. Devuelve una matriz con las coincidencias o
null
si no hay ninguna.
Como se null
evalúa como false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
¿Hay alguna diferencia con respecto al rendimiento?
Sí . Encontré esta breve nota en el sitio de MDN :
Si necesita saber si una cadena coincide con una expresión regular regexp, use regexp.test (string).
¿Es significativa la diferencia?
¡La respuesta una vez más es SÍ ! Este jsPerf que reuní muestra que la diferencia es ~ 30% - ~ 60% dependiendo del navegador:
Úselo .test
si desea un cheque booleano más rápido. Use .match
para recuperar todas las coincidencias cuando use la g
bandera global.
.test()
. :)
No olvides tener en cuenta la bandera global en tu 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.
.test()
? ¿no es el punto de .test()
verificar si la cadena tiene una expresión regular coincidente?
Este es mi resultado de referencia
prueba 4,267,740 operaciones / seg. ± 1.32% (60 corridas muestreadas)
ejecutivo 3,649,719 operaciones / seg. ± 2.51% (60 corridas muestreadas)
partido 3,623,125 operaciones / seg ± 1.85% (62 carreras muestreadas)
índice de 6.230.325 operaciones / seg. ± 0.95% (62 ejecuciones muestreadas)
El método de prueba es más rápido que el método de coincidencia, pero el método más rápido es el indexOf