2011-10-05 8 views
6
> var p = /abc/gi; 
> var s = "abc"; 
> p.test(s); 
    true 
> p.test(s); 
    false; 

Cuando ejecuto este código en la consola de Chrome Tengo este resultado más arriba. Cada vez que llamo '.test()' obtengo un valor diferente. ¿Alguien podría explicarme por qué sucede esto? graciasJavascript Regex con .test()

+1

http://stackoverflow.com/questions/7331753/strange-behavior-of-javascript-regex-test-function –

+0

Más incautos: [prueba interesante de Javascript RegExp] (http://stackoverflow.com/q/604860) y [La prueba de expresión regular no puede decidir entre verdadero y falso] (http://stackoverflow.com/questions/2669861/regular-expression-test- cant-decide-between-true-and-false-javascript) –

Respuesta

5

La bandera g provoca la expresión regular literal su uso para rastrear las coincidencias LastIndex

Si tuviera que;

print(p.test(s), p.lastIndex) 
print(p.test(s), p.lastIndex) 

Verías

true,3 
false,0 

Así que no pasa la segunda prueba como no hay ninguna coincidencia incrementales de la primera.

2

Se debe a la bandera/g. Cada búsqueda consecutiva comienza desde el último personaje que coincidió en la búsqueda anterior. En su caso, en la segunda ejecución comienza desde el final de la cadena y devuelve falso. La tercera vez comienza desde el principio otra vez. Etcétera.

También, echar un vistazo a esta pregunta: Why RegExp with global flag in Javascript give wrong results?