50 giri non sono molti, percui se il browser si blocca è per qualcos'altro...
Dovresti dare più info...ad esempio cos'è img? come fai a combinare le diverse emo con le diverse img...
fai un esempio o metti il tuo codice....

cmq un esempio che ho scritto è questo:
codice:
emoticons = new Array(":)",";)",":D");
imgEmoticons = new Array("[img]img1.gif[/img]","[img]img2.gif[/img]","[img]img3.gif[/img]")


emoticons.toString = function(){
			var myRE = "",L=this.length;
			for(var i=0; i<L; i++)
				myRE+=this[i].replace(/\)/gi,"\\)")+(i==L-1?"":"|");
			return myRE;
			}


emoticons.match = function(mtch){
			for(var i=0; i<emoticons.length; i++) 
				if(emoticons[i].replace(/\\/gi,"")==mtch) return imgEmoticons[i];
			return "";
		}


// ESEMPIO:
testo = "hola! :) ciauz ;) una risata: :D:D:D";
alert(testo);
alert(testo.replace(new RegExp(emoticons,"gi"),emoticons.match));
Non so se è quello che cerchi, ma con questo tipo di codice,
puoi gestire i tuoi array liberamente senza modificare poi le chiamate.
Il problema è quello di scrivere bene le versioni di toString/match,
cercando di individuare caratteri significativi per le RegExp (come ")"), ma una volta fatto questo, l'interfaccia rimane molto semplice da usare e da modificare.
ciauz.

PS: il forum ovviamente mi cambia le stringhe con le emo, ma le faccine sono: ": )", "; )", ": D"