Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Ancora su Regexp

  1. #1
    Utente bannato
    Registrato dal
    Jun 2000
    Messaggi
    160

    Ancora su Regexp

    Ciao Raga, sto sbattendo la testa contro quella bestia nera di regexp...come mai questo script non mi restituisce la parola "ambrogio"?
    Ciao e grazie! Kava

    codice:
    <script>
    var reg=/(ciao)([^<]*)(peppe)/gi
    txt="ciaociaociaociaociaoambrogiopeppepeppepeppepeppepeppe"
    var a=reg.test(txt);
    while (a==true){  
       txt=txt.replace(reg, "$2");
       a=reg.test(txt);
    
      }
    document.write(txt);
    </script>

  2. #2
    codice:
    <script> 
    var reg=/(ciao)([^\<]*)(peppe)/i, a;
    var txt = "ciaociaociaociaociaoambrogiopeppepeppepeppepeppepeppe" 
    while(a=reg.test(txt)){ 
    	txt=txt.replace(reg, "$2");
    } 
    document.write(txt); 
    </script>
    ecco qui
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    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
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.