Tengo un problema extraño al trabajar con la función Javascript Regexp.exec. Cuando se llama varias veces a la función en objetos nuevos (supongo ...) regexp, funciona una vez cada dos. ¡No entiendo por qué!Javascript Regex literal con/g usado varias veces
Aquí hay un pequeño ejemplo de bucle pero hace lo mismo cuando se usa una vez en una función y se llama varias veces.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/g).exec('abc'));
}
> 0 ["b", "b"]
> 1 null
> 2 ["b", "b"]
> 3 null
> 4 ["b", "b"]
Al quitar el/g, vuelve a la normalidad.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/).exec('abc'));
} /* no g^*/
> 0 ["b", "b"]
> 1 ["b", "b"]
> 2 ["b", "b"]
> 3 ["b", "b"]
> 4 ["b", "b"]
Supongo que hay una optimización, guardando el objeto regexp, pero parece extraño.
Este comportamiento es el mismo en Chrome 4 y Firefox 3.6, sin embargo, funciona como (I) se espera en IE8. Creo que eso está destinado, pero no puedo encontrar la lógica allí, ¡quizás puedas ayudarme!
Gracias
El mismo obj expresión regular está siendo reutilizado dentro de su bucle de allí, y '' lastIndex' restablece a 0' después de no coincidir con nada cada 2da iteración. Consulte http://stackoverflow.com/questions/1760192/which-way-is-better-to-define-javascript-regular-expressions/1760506#1760506 para obtener una gran captura de este "error". –
Creo que este problema ya puede estar solucionado. Ya estoy obteniendo la salida correcta de ambas formas en moz, chrome y es decir. ¿Alguien puede dar alguna explicación para esto? –