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?
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?
Sí. 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 SÍ! Este jsPerf que junté muestra la diferencia es ~30% - ~60% dependiendo del navegador:
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
.
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.
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