¿Cómo ignoro $ 1 reemplazar referencias inversas en javascript

Tengo una cadena que un usuario puede editar en cualquier momento, y una expresión regular que se realiza en la cadena, para agregarla a un xml y luego guardarla, pero pueden agregar '$ 1' a la cadena. Solo quiero que se guarde el texto '$1', pero tengo que realizar una expresión regular en la misma cadena en la que se encuentra $1. Reemplaza el $1 con un carácter de la expresión regular cada vez.

¿Cómo encuentro y reemplazo el $1 en esta cadena?

Ejemplo de lo que está sucediendo:

string1 = '<item id="1">i have $100</item>'

regexp = new RegExp('<item id="1"([^<]|<[^\/]|<\/[^i]|<\/i[^t]|<\/it[^e]|<\/ite[^m]|<\/item[^>])*<\/item>');

data = '<data><item id="1">i have no money</item><item id="2">i have no money</item></data>'

data = data.replace(regexp, string1);

Resultados

<data><item id="1">i have >00</item><item id="2">i have no money</item></data>

preguntado el 12 de junio de 12 a las 22:06

es realmente difícil descifrar lo que necesitas hacer aquí. ¿Puedes reformularlo un poco mejor tal vez? -

Ah, ya veo. La respuesta de @amnotiam debería hacerlo:

3 Respuestas

Si tiene una cadena variable que desea poner en su replace() llamada que posiblemente tenga $N's en él, puede evitar que el $N de ser tratado como una referencia inversa reemplazando $ con $$. Aparentemente, a diferencia de otros caracteres especiales en JS regex, el $ carácter no se puede escapar con un \ - debe ser escapado con un precedente $ (Imagínate).

En su ejemplo, podría hacer lo siguiente para solucionar el problema:

data = data.replace(regexp, string1.replace('$', '$$$'));

Esto debería convertir cualquier $está en $$ in string1, evitando que se traten como referencias anteriores.

(Nota: encontré esta pequeña pepita aquí)

respondido 24 mar '14, 14:03

Muy útil para señalar que $ debe ser escapado con otro $. - Jonás

¡El enlace externo es 404! - Shi Falei

Reemplazar usado solo con una cadena de búsqueda, solo reemplazará la primera aparición, por lo que sería mejor usar una expresión regular como esta: string1.replace(/\$/g, '$$$')) - gijswijs

Esto solo debería suceder si tiene un grupo de captura en la expresión regular.

Si no desea que sus grupos capturen, coloque ?: dentro del inicio del grupo.

/foo(?:bar)/

Respondido el 12 de junio de 12 a las 22:06

eso funcionó, gracias. Mientras buscaba cómo escribir un mejor ejemplo de lo que estaba saliendo mal, respondiste y aparentemente me negaron 3 veces... Impresionante... - Vuelo WPA

Puedes escapar del $. P.ej:

var replacement = '<item id="1">i have \\$100</item>';

Útil cuando tiene grupos de captura y necesita escribir un $.

Respondido el 12 de junio de 12 a las 23:06

pero si no puedo controlar el contenido que ingresa, y tengo que buscar $1 en la cadena para agregar esas barras, entonces nuevamente tendría que usar una expresión regular para encontrarlas todas y volvería al punto de partida . gracias de todos modos - Vuelo WPA

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.