¿Cómo cuento correctamente la cantidad de cadenas reemplazadas en Javascript? mi función de incremento está en la parte de reemplazo de la función de reemplazo a continuación, me da un "0". No estoy seguro de si el problema radica en la función o en la forma en que la llamé. gracias de antemano
<!DOCTYPE html> <html lang="en"> <body> <main> Message:<br /> <textarea id="message" name="message" rows="3" cols="20">Hello 202204</textarea> <span id="ChCtr"></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> <script> function newrep(){ let temp= document.getElementById("message").value; var fid = document.getElementById('find').value; var regexp=new RegExp(fid, "gi"); var rv = document.getElementById('replace').value; var inp=document.getElementById('message').value; var count=0; let str2=(inp.replace(regexp,rv,function(x){count+=1;return"1"})) document.getElementById("message").value = str2; document.getElementById("ChCtr").innerHTML = count; } </script> </body> </html>está utilizando la función de reemplazo de manera incorrecta. solo hay dos argumentos permitidos para esto
uno = término de búsqueda
dos = cadena o función
si está utilizando la función para reemplazar el valor, entonces debe devolver el valor que desea reemplazar en esa función y eso es todo
function newrep(){ let temp= document.getElementById("message").value; var fid = document.getElementById('find').value; var regexp=new RegExp(fid, "gi"); var rv = document.getElementById('replace').value; var inp=document.getElementById('message').value; var count=0; let str2=inp.replace(regexp,x => { count++; return rv; }) document.getElementById("message").value = str2; document.getElementById("ChCtr").innerHTML = count; } <!DOCTYPE html> <html lang="en"> <body> <main> Message:<br /> <textarea id="message" name="message" rows="3" cols="20">Hello 202204</textarea> <span id="ChCtr"></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> </body> </html>Esto funcionará para ti. Salud :)
function newrep() { let temp = document.getElementById("message").value; var fid = document.getElementById("find").value; var regexp = new RegExp(fid, "gi"); var rv = document.getElementById("replace").value; var inp = document.getElementById("message").value; var count = 0; // Additional condition, when find is empty if (!fid) { document.getElementById("ChCtr").innerHTML = count; return; } // corrected your useage of replace function let str2 = inp.replace(regexp, function () { count += 1; return rv; }); update(str2, count); } function update(msg, count) { document.getElementById("message").value = msg; document.getElementById("ChCtr").innerHTML = count; } <!DOCTYPE html> <html lang="en"> <body> <main> Message:<br /> <textarea id="message" name="message" rows="3" cols="20">Hello 202204</textarea> <span id="ChCtr"></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> </body> </html>