Je sais qu'il y a quelques discordances regex/lastIndex
mais celui-ci est nouveau pour moi!Regex/lastIndex - Comportement inattendu
Comportement attendu: Création d'une nouvelle expression régulière (avec littérale/constructeur) sera, de toute évidence, créer un nouvel objet RegExp avec une propriété lastIndex
à zéro.
Comportement réel: (dans FF, Chrome): La propriété lastIndex semble persister à travers plusieurs créations 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');
Voir ici: http://jsbin.com/otoze
Un nouvel objet RegExp est en cours de création sur chaque appel de fonction (à droite?), Alors pourquoi est ce qui suit en cours d'écriture sur le document ?? -
0
3
6
??? Notez, cette bizarrerie semble se produire dans FF (3) et Chrome (2), mais, curieusement, pas d'Internet Explorer.
Est-ce que ce comportement est attendu, IE se trompe-t-il ou non? Est-ce un bug bien connu?
EDIT: cela ne semble pas se produire lors de l'instanciation regex avec un constructeur au lieu d'un littéral. Par exemple. ... Pourtant, le littéral devrait (théoriquement) fonctionner, n'est-ce pas?
C'est ma conjecture aussi ... Encore bizarre ... – James
@JP: Ce n'est pas vraiment bizarre, vous n'avez jamais utilisé le mot clé 'new'. – Chris
Ce qui est étrange, c'est que si vous appelez le même code dans la fonction plusieurs fois, il retournera la bonne sortie. Il semble presque qu'il optimise incorrectement certaines affectations dans les appels ultérieurs de la même fonction. –