2010-03-12 17 views
19

Como dice el título, necesito relacionar todas las apariciones del signo $ en una variable de cadena con un guión bajo.

que he intentado:

str.replace(new RegExp('$', 'g'), '_'); 

Pero esto no funciona para mí y nada es reemplazado.

Respuesta

39

El $ en RegExp es un carácter especial, por lo que debe escapar con barra invertida. Sin embargo

new_str = str.replace(new RegExp('\\$', 'g'), '_'); 

, en JS puede utilizar la sintaxis más simple

new_str = str.replace(/\$/g, '_'); 
+2

+1, ve por lo literal, no te molestes con el constructor a menos que necesites usar variables en expresiones regulares. –

1

........

str.replace(new RegExp('\\$', 'g'), '_'); 

Becaue $ es Char especial en js, que necesita para escapar de ella.

+1

El segundo es incorrecto en dos aspectos, reemplazará '\ $', no '$' y solo reemplazará 1 ocurrencia, no múltiples. –

+0

@Andy: Sí, me di cuenta y lo eliminé pronto :) Gracias – Sarfraz

8

No es necesario utilizar RegExp. Se puede utilizar la sintaxis literal:

str.replace(/\$/g, '_') 

Sólo tiene que escapar el carácter $ ya que es un carácter especial en las expresiones regulares que marca el final de la cadena.


Editar Oh, también se puede utilizar split y join para resolver esto:

str.split("$").join("_") 
+0

Al igual que la idea de dividir y unir: ¿qué tan rápido es en comparación con una expresión regular, me pregunto? –

-3

No es necesario expresiones regulares sólo para reemplazar un símbolo:

newStr = oldStr.replace('$', '_') 
+4

El título indicó "todas" las ocurrencias. – kennytm

+0

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace – user187291

+0

Esto reemplazará solo la primera aparición del símbolo, no todas las ocurrencias. Por favor, elimine esta respuesta, ya que es claramente incorrecta – edc65

Cuestiones relacionadas