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