Recientemente hice un script en el que quiero eliminar una coincidencia EXACTA de un archivo txt con node. Imprime verdadero pero en realidad no elimina la línea del archivo txt. Estoy usando discord para obtener el argumento. No estoy seguro de lo que estoy haciendo mal, pero aquí está mi script:
const fs = require('fs') fs.readFile('notredeemed.txt', function (err, data) { if (err) throw err; if (data.toString().match(new RegExp(`^${args[0]}$`, "m"))) { fs.readFile('notredeemed.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } var result = data.replace(/${args[0]/g, ''); fs.writeFile('notredeemed.txt', result, 'utf8', function (err) { if (err) return console.log(err); }); }); console.log("true")Si alguien pudiera ayudarme se lo agradecería :)
Creo que puede hacerlo de manera muy similar a su solución actual, solo que la expresión regular está un poco apagada.
En lugar de solo usar ^ y $ para indicar que toda la cadena comienza y termina con args[0] , usé dos grupos de captura como delimitadores de una línea.
Este coincide con cualquier carácter de nueva línea o el comienzo de la cadena. Funciona para la primera línea del archivo y evita el reemplazo parcial, por ejemplo, llo reemplaza Hello :
(\n|^) Y este coincide con un retorno de carro o el final de la cadena. Esto funciona para los casos en los que no hay una nueva línea al final del archivo y también evita que Hel reemplace a Hello :
(\r|$)Eso debería garantizar que siempre esté eliminando una línea completa que coincida con sus argumentos.
También eliminé el segundo readFile ya que no era necesario para que funcionara.
const fs = require("fs") fs.readFile("notredeemed.txt", function (err, data) { if (err) throw err const match = new RegExp(`(\n|^)${args[0]}(\r|$)`) const newFile = data.toString().replace(match, ``) fs.writeFile("notredeemed.txt", newFile, "utf8", function (err) { if (err) return console.log(err) console.log("true") }) })Aquí está mi solución.
Algoritmo:
"\n" o "\r\n" ) const replacingLine = "- C/C++ addons with Node-API"; const fileContent = `- V8 - WASI - C++ addons - C/C++ addons with Node-API - C++ embedder API - C/C++ addons with Node-API - Corepack`; const newFileContent = replace({ fileContent, replacingLine }); console.log(newFileContent); function replace({ fileContent, replacingLine, endOfLineFlag = "\n" }) { return fileContent .split(endOfLineFlag) .filter((line) => line !== replacingLine) .join(endOfLineFlag); }