regex.prueba V. S. string.match para saber si una cadena coincide con una expresión regular


Muchas veces estoy usando la función string match 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?

Author: gdoron, 2012-06-08

2 answers

Uso básico

Primero, veamos qué hace cada función:

regexObject .ensayo( String )

Ejecuta la búsqueda de una coincidencia entre una expresión regular y una cadena especificada. Devuelve true o false.

string .partido( RegExp )

Se usa para recuperar las coincidencias cuando se compara una cadena con una expresion. Devuelve un array con las coincidencias o null si no hay ninguna.

Dado que null se evalúa a false,

if ( string.match(regex) ) {
  // There was a match.
} else {
  // No match.
} 

Rendimiento

¿Hay alguna diferencia con respecto al rendimiento?

. Encontré esta breve nota en el sitio de MDN :

Si necesita saber si una cadena coincide con una expresión regular regexp, utilice regexp.test (string).

¿Es significativa la diferencia?

La respuesta una vez más es ! Este jsPerf que junté muestra la diferencia es ~30% - ~60% dependiendo del navegador:

prueba vs partido / Prueba de Rendimiento

Conclusión

Use .test si desea una comprobación booleana más rápida. Use .match para recuperar todas las coincidencias cuando use la bandera global g.

 366
Author: gdoron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-08 13:31:34

No olvides tener en cuenta la bandera global en tu regexp:

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.

 84
Author: gtournie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-27 04:53:57