Node.js 替换文件中的字符串

在 Node.js 中替换文件中的字符串:

  1. 使用 fs.readFile() 方法读取文件。
  2. 使用 replace() 方法将字符串替换为目标字符串。
  3. 使用 fs.writeFile() 方法将结果写入文件。
// 如果使用 ES6 导入,请取消注释下一行
// import {readFile, writeFile, writeFileSync, promises as fsPromises} from 'fs';
const {readFile, writeFile, promises: fsPromises} = require('fs');

readFile('./example.txt', 'utf-8', function (err, contents) {
  if (err) {
    console.log(err);
    return;
  }

  const replaced = contents.replace(/to be replaced/g, 'replacement string');

  writeFile('./example.txt', replaced, 'utf-8', function (err) {
    console.log(err);
  });
});

我们使用 fs.readFile 方法来读取文件的内容。

我们传递给该方法的第一个参数是文件的路径,第二个参数是编码。

如果省略 encoding 参数,该函数将返回一个缓冲区,否则返回一个字符串。

如果没有错误和文件内容,则使用错误对象或 null 调用回调函数。

上面的代码片段假设有一个 example.txt 文件位于同一目录中。 确保也在同一目录中打开我们的终端。

to be replaced
to be replaced
to be replaced

我们使用 String.replace 方法替换文件中的字符串。

我们传递给 replace 方法的第一个参数是正则表达式,第二个参数是替换字符串。

正斜杠 // 标记正则表达式的开始和结束。

g 标志代表全局并替换所有匹配字符串的出现。

如果省略 g 标志,则只会替换文件中第一次出现的字符串。

如果要执行不区分大小写的匹配,也请使用 i 标志。

// 如果使用 ES6 导入,请取消注释下一行
// import {readFile, writeFile, writeFileSync, promises as fsPromises} from 'fs';
const {readFile, writeFile, promises: fsPromises} = require('fs');

readFile('./example.txt', 'utf-8', function (err, contents) {
  if (err) {
    console.log(err);
    return;
  }

  // 区分大小写
  const replaced = contents.replace(/to be replaced/gi, 'replacement string');

  writeFile('./example.txt', replaced, 'utf-8', function (err) {
    console.log(err);
  });
});

i 标志代表忽略并在字符串中进行不区分大小写的搜索。

然后使用 fs.writeFile 函数将更新后的字符串写入文件。

上面的示例假定代码放置在 .js 文件中并查找 example.txt 文件。 确保在同一目录中打开您的终端并使用节点 index.js 运行该文件。

或者,我们可以使用 promise

在 Node.js 中替换文件中的字符串:

  • 使用 fsPromises.readFile() 方法读取文件。
  • 使用 replace() 方法将字符串替换为替换。
  • 使用 fsPromises.writeFile() 方法将结果写入文件。
//  如果使用 ES6 导入,请取消注释下一行
// import {readFile, writeFile, writeFileSync, promises as fsPromises} from 'fs';
const {readFile, writeFile, promises: fsPromises} = require('fs');

async function replaceInFile(filename, replacement) {
  try {
    const contents = await fsPromises.readFile(filename, 'utf-8');
    const replaced = contents.replace(/to be replaced/gi, replacement);

    await fsPromises.writeFile(filename, replaced);
  } catch (err) {
    console.log(err);
  }
}

replaceInFile('./example.txt', 'replacement string ‘);

方法是相同的,但是此示例使用 Promise 而不是回调。

fsPromises.readFile() 方法异步读取所提供文件的内容。

  • 如果我们没有为 encoding 参数提供值,则该方法返回一个缓冲区,否则返回一个字符串。
  • 该方法返回一个满足文件内容的promise,因此我们必须等待它或对其使用 .then() 方法来获取已解析的字符串。

如果文件已存在,fsPromises.writeFile 方法将数据异步写入文件替换文件的内容。

查看笔记

扫码一下
查看教程更方便