Aetae,
Спасибо, подкинул идею. В итоге запилил так
var re = new RegExp('(.*)(<img(.*src="[^"]*/(.*?)\.gif")>)(.*)', 'i');
do {
text = text.replace(re, '$1 :!$4:! $5');
} while (text.search(re) !== -1);
return text;
Работает как надо. Второй вариант попробовал запилить аналогично--не форцает. Не могу понять где ошибка.
var re = new RegExp("(.*):!(.*?)!:(.*)", "i");
do {
text = text.replace(re, "$1<img src=\"$2.gif\">$3");
} while (text.search(re) !== -1);