So che ci sono alcune regex/lastIndex
discrepanze ma questo è nuovo per me!Regex/lastIndex - Comportamento imprevisto
comportamento previsto: Creazione di una nuova espressione regolare (con letterale/costruttore) sarà, ovviamente, creare un nuovo oggetto RegExp con una proprietà lastIndex
impostato a zero.
Comportamento effettivo: (in FF, Chrome): la proprietà lastIndex sembra persistere attraverso più creazioni 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');
vedere qui: http://jsbin.com/otoze
Un nuovo oggetto RegExp è essere creato su ogni chiamata di funzione (di destra?), Quindi perché è la seguente fase di scrittura del documento ?? -
0
3
6
???
Nota, questa stranezza sembra accadere in FF (3) e Chrome (2), ma, curiosamente, non in IE.
È questo comportamento previsto, IE ha sbagliato o giusto? È un bug noto?
EDIT: questo non sembra accadere quando istanziare la regex con un costruttore, invece di un letterale. Per esempio. new RegExp('ABC','g');
... Tuttavia, il letterale dovrebbe (teoricamente) funzionare, giusto?
Questa è la mia ipotesi troppo ... Ancora strano ... – James
@ JP: Non è poi così strano, non hai mai usato la parola chiave 'new'. – Chris
Ciò che è strano è che se si chiama lo stesso codice nella funzione più volte, verrà restituito l'output corretto. Sembra quasi che ottimizzi erroneamente alcuni incarichi in chiamate successive della stessa funzione. –