2012-02-24 13 views
12

Encontré un error en mi código JavaScript que he aislado a una cadena de reemplazo que está actuando de una manera que no esperaba. Aquí hay un ejemplo del código:

var text = "as"; 
text = text.replace(text,"$\'"); 
console.log(text); 

Esto imprime una cadena vacía en la consola. Esperaba que imprimiera $ 'en la consola. ¿Alguien puede explicar esto?

+2

Más información se puede encontrar en la especificación: http://es5.github.com/#x15.5.4.11. Como Alex mencionó en su respuesta eliminada, '$ '' es una secuencia de caracteres especial que se reemplaza por la cadena que sigue a la coincidencia. P.ej. '" foobar ".replace (" foo "," $ '")' se convierte en 'barbar'. –

Respuesta

18

Para utilizar $ en que resulta cadena, utilice $$ como $ tiene un significado especial en JavaScript expresiones regulares y la cadena replace método: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter

+0

JS violín: http://jsfiddle.net/3YTT5/ –

+0

Si uso $$, ¿otros navegadores entenderán que quiero '$' en lugar de aceptarlo como una cadena '$$' literal? editar: Parece que esto es JavaScript estándar. Cuando le pregunté por primera vez sobre otros navegadores, me pareció que era una peculiaridad de Firefox. –

+0

esto es un comportamiento estandarizado y también funciona en IE: http://msdn.microsoft.com/en-us/library/windows/apps/t0kbytzc(v=vs.vvs94).aspx –

11

Si no sé lo que está en mi cadena de reemplazo que utilizan

replaceWith = "might have 2 $ signs $$ $$$ $$$$" 
"a b c".replace("b", replaceWith) // unexpected result 
"a b c".replace("b", function(){return replaceWith}) // no surprises 
+1

¡esto es tan simple y tan útil! gracias, me ahorró algunos problemas, estaba empezando a pensar en cómo escapar de todo '$' con '$' .. ¿usando expresiones regulares? obviamente no es una buena idea! – Kaddath

+1

Este truco en realidad solo me salvó el trasero en todas partes en uno de mis proyectos debido a la creación de plantillas dentro de cadenas localizables que se usan en todas partes. Fue un poco demasiado complicado ordenar qué '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' se pueden obtener. Es mucho más fácil simplemente tirar '() =>' antes de la cadena y terminar con eso. –

+0

Mejor respuesta, no hay necesidad de perder el tiempo escapando. La cadena exacta que desea insertar como reemplazo es lo que obtiene – Omer

Cuestiones relacionadas