Non credevo di dover arrivare a tanto, nel senso che non volevo far perder più che tanto tempo, comunque eccolo:

codice:
document.getElementsByClassName = function(clsName){
    var retVal = new Array();
    var elements = document.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}

function addSmiley(dummy){
  var d = [], i=0, def = ['post-body','comment-body'];

  for(i=0;i<def.length;i++){
	var content = document.getElementsByClassName(def[i]);
	for(var j=0;j<content.length;j++)
		d.push(content[j]);
	}

  for(i=0;i<arguments.length;i++){
	var content = document.getElementsByClassName(arguments[i]);
	for(var m=0;m<content.length;m++)
		d.push(content[m]);
  }

  for(var i=0;i<d.length;i++){
        d[i].innerHTML = d[i].innerHTML.replace(/\s<:d>/g, '  ');
        d[i].innerHTML = d[i].innerHTML.replace(/\s:-?>)/g, '  ');
    }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(function(){
	addSmiley();
});
Se nel replace uso altri simboli funziona, ma quando uso < e >, con o senza backslash, non mi funziona più niente e non sostituisce neanche gli altri insiemi di simboli, quelli senza < e >.