Eventuali duplicati:
Javascript regex returning true.. then false.. then true.. etcPerché il mio regex.test javascript() darà alternando risultati
var r = /\d/g;
var a = r.test("1"); // will be true
var b = r.test("1"); // will be false
console.log(a == b); // will be false
Si prega di spiegare a me perché il risultato di r.test ("1 ") si alterna ad ogni chiamata?
Sono stato in grado di risolvere il problema che stavo avendo rimuovendo il modificatore g. Tuttavia mi piacerebbe ancora capire perché questo accade.
grazie! Ho trovato alcuni ulteriori dettagli che spiegano che .test è fondamentalmente una scorciatoia per .exec()! = Null, ed è .exec() che memorizza l'ultimoIndice per la prossima chiamata. (http://www.regular-expressions.info/javascript.html) Ciò che è strano è che anche quando vengono date stringhe diverse per ogni chiamata, accade lo stesso. Does lastIndex non resetta se viene chiamato su una stringa diversa? –
No, poiché 'lastIndex' è una proprietà della regex, non della stringa. In Perl, al contrario, è associato alla stringa (la proprietà 'pos'), mentre in Java è mantenuta dall'oggetto Matcher. 'lastIndex' è fonte di molte frustrazioni: http://blog.stevenlevithan.com/archives/fixing-javascript-regexp –