Este es un programa simple de encontrar y reemplazar valor; sin embargo, con cada cambio realizado viene con 2 barras. es decir (salida/valor cambiado/salida) mientras que me gustaría que fuera (salida de valor cambiado salida). ¿Cómo puedo solucionar esto? ayuda apreciada.
function newrep() { var fid = document.getElementById('find').value; var regexp = new RegExp(fid, "gi"); var rv = document.getElementById('replace').value; var rvreg = new RegExp(rv); var inp = document.getElementById('message').value; let str2 = inp.replace(regexp, rvreg); document.getElementById("message").value = str2; } <main/> Message: <br /> <textarea id="message" name="message" rows="3" cols="20">Hello 202204</textarea> <span id="Message"></span> <br/><br/> Find: <br /> <input type="text" id="find" name="find" size="30"><br /> <br/><br/> Replace: <br /> <input type="text" id="replace" name="replace" size="30"><br /> <br/><br/> <button onclick="newrep()">Find and Replace</button> <br/><br/> </main>No necesita construir una expresión regular a partir del valor de reemplazo.
let s = "hello world" let re = "hello" let regex = new RegExp(re, "gi") let rv = new RegExp("hello") console.log("When regex is constructed:", s.replace(regex, rv)) rv = "hello" console.log("When regex is NOT constructed:", s.replace(regex, rv))O en tu código:
function newrep() { var fid = document.getElementById('find').value; var regexp = new RegExp(fid, "gi"); var rv = document.getElementById('replace').value; var inp = document.getElementById('message').value; let str2 = inp.replace(regexp, rv); document.getElementById("message").value = str2; } <main/> Message: <br /> <textarea id="message" name="message" rows="3" cols="20">Hello 202204</textarea> <span id="Message"></span> <br/><br/> Find: <br /> <input type="text" id="find" name="find" size="30"><br /> <br/><br/> Replace: <br /> <input type="text" id="replace" name="replace" size="30"><br /> <br/><br/> <button onclick="newrep()">Find and Replace</button> <br/><br/> </main>Todavía no puedo comentar, así que pondré esto aquí. Permitir que los usuarios ingresen RegExps arbitrarios es una mala idea, ya que puede conducir a ReDOS
Siempre y cuando los usuarios ejecuten su propio RegExp en su propia entrada, está bien (en el peor de los casos, ellos mismos volverán a DOS y tendrán que volver a cargar la página cuando se congele).
Si el texto o RegExp provienen de un tercero, esto puede provocar ataques en los que un usuario malintencionado congelará la pestaña del navegador de otro usuario o su servidor (si el RegExp proporcionado por el usuario se ejecuta allí).
Además de esto, la respuesta de @anotherGatsby me parece buena.