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;
}