"aDb".replace("D","$$")Si pensaron "a$$b" se equivocaron. Da "a$b" (con un solo $).
Para que de el valor que esperaba ("a$$b") hay que hacer este hack:
"aDb".replace("D",function() { return "$$" })¿Por qué?
Ni idea, pero anda así en rhino y V8, así que debe estar en la especificación.
Happy hacking,
Aureliano
Hola
ResponderBorrarComo la cadena que uno busca en el replace puede ser un regexp, el reemplazo puede ser alguno de los grupos que se capturaron (si hubo alguno) u otros valores relacionados con la busqueda. Y todas se referencian con $ al principio, por lo que el $$ es la manera de insertar un '$'
http://www.regular-expressions.info/javascript.html
Me imaginé que venía por ese lado. Pero el problema es que en la versión original texto de reemplazo lo ingresa el usuario. Y para eso es este hack en realidad. Para no tener que escapar el texto del usuario antes de usarlo como resultado del replace.
ResponderBorrarIgual tener que escapar el $ aún cuando no hay regexp es una chotada.
Aure no se si lo viste en buzz pero se resuelve un poco mas facil. "aDb".replace("D", "$$$");
ResponderBorrarLo había visto. El problema es cuando en vez de "$$" tengo un string con contenido generado por un usuario que puede tener o no tener "$$" como substring.
ResponderBorrarLas opciones que se me ocurren son:
* escapar los $ de lo ingresado por el usuario antes de usar el replace.
* usar este truco con la funcion.
otrah osiones...
ResponderBorrarjavascript:"aDb".replace("D","\u0024")
javascript:unescape("aDb".replace("D",escape("$")))