Sé que hay algunas discrepancias regex/lastIndex
pero esta es nueva para mí.Regex/lastIndex - Comportamiento inesperado
comportamiento esperado: Creación de una nueva expresión regular (con literal/constructor) será, obviamente, crear un nuevo objeto RegExp con una propiedad lastIndex
puesto a cero.
Comportamiento real: (en FF, Chrome): La propiedad lastIndex parece persistir a través de múltiples creaciones RegExp.
E.g.
function foo(s) {
// A *NEW* regular expression
// is created on each call of foo():
var regex = /ABC/g;
document.write(regex.lastIndex + '<br/>');
// regex.test() updates lastIndex property
regex.test(s);
// This is where the regex's life should end...
// (Why does it persist?)
}
foo('ABC');
foo('ABCABC');
foo('ABCABCABC');
Ver aquí: http://jsbin.com/otoze
Un nuevo objeto RegExp se está creando en cada función de llamada (¿verdad?), ¿Por qué es la siguiente están escribiendo en el documento ?? -
0
3
6
???
Nota, esta rareza parece ocurrir en FF (3) y Chrome (2), pero, curiosamente no en IE.
¿Es este comportamiento esperado, IE lo entiende mal o no? ¿Es este un error conocido?
EDIT: esto no parece que ocurra cuando una instancia de la expresión regular con un constructor en lugar de un literal. P.ej. new RegExp('ABC','g');
... Sin embargo, el literal debería (teóricamente) funcionar, ¿no?
Esa es mi conjetura también ... Todavía extraño ... – James
@JP: No es tan extraño, nunca usaste la palabra clave 'new'. – Chris
Lo extraño es que si llamas varias veces al mismo código en la función, devolverá la salida correcta. Casi parece que optimiza incorrectamente algunas asignaciones en llamadas posteriores de la misma función. –