validate test regular regexp example javascript regex performance

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 ! 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.