Innanzitutto a me i replace scritti nel primo post funzionano correttamente. Certo, se nel testo scrivi [ MYCODE ] e poi cerchi [ CODE ], chiaramente non lo trovera' mai.

Poi cerchiamo di non fare confusione con le regexp:

codice:
/[CODICE]$1[/CODICE]

e' un pattern sbagliato sintatticamente e concettualmente. Sintatticamente e'
sbagliato perche' gli slash sono i delimitatori, quindi il pattern e'

/[CODICE]$1[/

seguito dai modificatori C O D I C E ] che non significano niente.

Poi nelle regexp le parentesi quadre hanno un significato specifico, cioe' delimitano 
le character class, quindi [CODICE] significa UN carattere tra 'C', 'O', 'D', 'I',
'C' (ancora) e 'E'. Anche $ ha un significato particolare, e cioe' "fine riga".

$1 e' la variabile speciale che contiene il testo contenuto nella prima coppia di parentesi
tonde, in breve $1 si usa nel REPLACE, (.*?) nel SEARCH, non viceversa.