Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    modificare una variabile dal "modello"

    Ciao a tutti! ho una variabile tipo:
    codice:
    var testo = "prova [tag]x[/tag] prova di testo [tag]y[/tag]";
    e grazie ad un "modello" tipo:
    codice:
    var modello = "prova1 [tag][/tag] prova di articolo [tag][/tag]";
    vorrei che mi diventasse così:
    codice:
    var testo = "prova1 [tag]x[/tag] prova di articolo [tag]y[/tag]";
    in pratica vorrei poter modificare tutta la variabile testo tranne le scritte [tag], [/tag] e il loro contenuto. le modifiche saranno contenute nella variabile modello.
    come posso fare?

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    codice:
    var testo = "prova [tag]x[/tag] prova di testo [tag]y[/tag] etc. etc.";
    var modello = "prova1 $1 prova di articolo $2";
    
    var risultato = testo.replace(/[^\[]*(\[[^\]]+\][^\[]*\[\/[^\]]+\])[^\[]*(\[[^\]]+\][^\[]*\[\/[^\]]+\])[^\[]*/, modello);
    
    alert(risultato);
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    perfetto!! cavolo non pensavo che veniva fuori un'espressione regolare così complessa.
    ma se il tag fosse un'altro? nell'espressione regolare mi sembra di capire che io posso usare un qualunque tag compreso tra le parentesi quadre, ma se volessi usare un tag tipo ***tag*** o {tag}?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    io per ora mi sono creato questo ma non è testatissimo
    codice:
    <script>
    function replaceByModel(txt,model,tag){
    	nuovo="";
    	for(i=0;i<tag.length;i++){
    		tag_ini_pos_txt=-1;
    		tag_ini_pos_mod=-1;
    		tag_fin_pos_txt=0;
    		tag_fin_pos_mod=0;
    		while(txt.indexOf(tag[i].inizio,tag_ini_pos_txt+1)!=-1){
    			tag_ini_pos_txt=txt.indexOf(tag[i].inizio,tag_ini_pos_txt+1);
    			tag_ini_pos_mod=model.indexOf(tag[i].inizio,tag_ini_pos_mod+1);
    			tag_fin_pos_txt=txt.indexOf(tag[i].fine,tag_fin_pos_txt)+tag[i].fine.length;
    			
    			nuovo+=model.substr(tag_fin_pos_mod,tag_ini_pos_mod-tag_fin_pos_mod);
    			nuovo+=txt.substr(tag_ini_pos_txt,tag_fin_pos_txt-tag_ini_pos_txt);
    			
    			tag_fin_pos_mod=model.indexOf(tag[i].fine,tag_fin_pos_mod)+tag[i].fine.length;
    		}
    	}
    	return nuovo;
    }
    
    var testo = "prova [tag]x[/tag] prova di testo [tag]y[/tag]";
    var modello = "prova1 [tag][/tag] prova di articolo [tag][/tag]";
    
    alert(replaceByModel(testo,modello,[{inizio:"[tag]",fine:"[/tag]"}]));
    </script>

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    se a qualcuno potesse servire questa funzione, funziona! ed è anche un pò più pulita
    l'importante è che i tag non contengano "\"
    codice:
    function replaceByModel(txt,model,tag){
    
    	function replace_by(txt,pattern,new_txt,start){
    		pt1=txt.substr(0,start);
    		pt2=txt.substr(start,txt.length-start);
    		return pt1+pt2.replace(eval(pattern),new_txt);
    	}
    	
    	function escapeRegex(s){
    		return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
    	}
    
    	//scorro tutti i tag
    	for(i=0;i<tag.length;i++){
    		pattern="/"+escapeRegex(tag[i].inizio)+"(.*?)"+escapeRegex(tag[i].fine)+"/";
    		
    		//in matches metto tutti i tag+contenuti in un array
    		matches = txt.match(eval(pattern+"g"));
    		
    		//prendo model e sostituisco i tag con quelli di txt
    		ind=-1; fin=0; i_match=0;
    		while(model.indexOf(tag[i].inizio,ind+1)!=-1){
    			model=replace_by(model,pattern,matches[i_match],fin);
    			ind=model.indexOf(tag[i].inizio,ind+1);
    			fin=model.indexOf(tag[i].fine,ind)+tag[i].fine.length;
    			i_match++;
    		}
    	}
    	
    	return model;
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.