la flag global (g) può creare qualche problema nell'esecuzione ripetuta di test (e di exec se non ricordo male),
infatti, prendendo spunto dall'esempio proposto:
codice:
txt="ciaociaociaociaociaoambrogiopeppepeppepeppepeppepeppe"
var reg=/(ciao)(ambrogio)(peppe)/gi
alert(reg.test(txt)+", "+reg.test(txt))
si ottiene un risultato inatteso (quello inatteso da Kava appunto)
Questo è giustificato dal fatto che quando si creano RegExp con "g" test comincia
la sua ricerca dal primo carattere dopo l'ultimo match.
Fortunatamente la proprietà lastIndex fornisce proprio l'indice di questo carattere:
codice:
alert(reg.test(txt)+", "+reg.lastIndex+"\n"+
reg.test(txt)+", "+reg.lastIndex)
dal primo lastIndex in poi non è più possibile matchare la regexp:
codice:
alert( reg.test(txt)+"\n"+
"reg.lastIndex : "+reg.lastIndex+"\n"+
"txt.substring(0,reg.lastIndex) : "+txt.substring(0,reg.lastIndex)+"\n"+
"txt.substring(reg.lastIndex,txt.length) : "+txt.substring(reg.lastIndex,txt.length)+"\n"+
reg.test(txt)+"\n"+
"reg.lastIndex : "+reg.lastIndex+"\n"+
"txt.substring(0,reg.lastIndex) : "+txt.substring(0,reg.lastIndex)+"\n"+
"txt.substring(reg.lastIndex,txt.length) : "+txt.substring(reg.lastIndex,txt.length)+"\n"
)
si potrebbe rimediare a questo inconveniente,
ripristinando manualmente a 0 il valore di lastIndex tra due successivi test:
codice:
alert(reg.test(txt)+", "+(reg.lastIndex=0)+"\n"+
reg.test(txt)+", "+reg.lastIndex)
Qualche tempo fa avevo fatto test un po' più approfonditi..ma non me ne ricordo i risultati...mi pare che fosse un comportamento comune su tutti i browser, ma ora non ci metterei la mano sul fuoco.
ciauz