¿Cómo ignoro $ 1 reemplazar referencias inversas en javascript
Frecuentes
Visto 1,114 veces
0
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>
3 Respuestas
6
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
Enlace de trabajo: gotofritz.net/blog/escaping-in-replace-strings-in-javascript - gijswijs
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
3
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
-1
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 javascript regex replace backreference or haz tu propia pregunta.
es realmente difícil descifrar lo que necesitas hacer aquí. ¿Puedes reformularlo un poco mejor tal vez? - Phillip Schmidt
Ah, ya veo. La respuesta de @amnotiam debería hacerlo: Phillip Schmidt