Cita: Siempre me ganas por la mano, como te odio!!
¡jeje! se que lo dices en broma, pero no te preocupes, en verdad no tiene secreto. como ya tu sabras, el segundo argumento de replace acepta dos tipos de valores: un string con el cual será reemplazado, o una funcion que devuelve un string. esta funcion recibe automaticamente una cantidad variable de argumentos dependiendo de la expresion. basicamente los argumentos tienen este esquema.
Código:
// Sipnosis:
function(match, group1, group2, ..., groupN, index, input){}
Argumentos:- match
contiene la cadena de todo lo pareado por la expresion, incluyendo subexpresiones.
- group1, group2, ..., groupN
estos argumentos se van creando de acuerdo a la cantidad de grupos en la expresion. cada uno de estos argumentos contiene la cadena de acuerdo a lo pareado por cada grupo. el orden de los argumentos corresponde segun el orden de grupos en la expresion.
- index
contiene un valor numerico que indica la posicion donde la expresion comenzo a parear dentro de la cadena. o sea, es parecido a indexOf.
- input
el string completo en el estado original. es decir, antes de que el reemplazo tome lugar.
me parece a mi que tu confusion fue utilizar unas "variables especiales" dentro de una funcion. estas "variables especiales" solo son validas si el segundo argumento de replace es un string.