使用nodejs替换文件中的多个字符串

Replace multiple strings in a file using nodejs

我有一个 json 文件,我想在其中使用节点 js 的 fs 将两个单词替换为两个新单词。我在 Replace a string in a file using nodejs 上阅读了类似查询的解决方案。然后我尝试了以下代码片段,但它只替换了一个单词。我需要多次 运行 它来替换多个单词。

这是代码片段:

var fs = require('fs')
fs.readFile('C:\Data\sr4_Intellij\newman\Collections\api_collection.json', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  var result1 = data.replace(/{{Name}}/g, 'abc');
  var result2 = data.replace(/{{Address}}/g, 'xyz');
  var arr1 = [result1,result2]
  console.log(arr1[0]);

  fs.writeFile('C:\Data\sr4_Intellij\newman\Collections\api_collection.json', arr1, 'utf8', function (err) {
     if (err) return console.log(err);
  });

});

您需要对第一次替换的结果执行第二次 replacedata 没有被 replace 改变; replace returns 一个新的字符串。

所以:

var result = data.replace(/{{Name}}/g, 'abc')
                 .replace(/{{Address}}/g, 'xyz');

...然后将 result 写入文件。

或者,如果它是一个大文件或者您有很多不同的东西要替换,这特别有用,请使用 single replace 和回调:

var replacements = Object.assign(Object.create(null), {
    "{{Name}}": "abc",
    "{{Address}}": "xyz"
    // ...and so on...
});

var result = data.replace(/{{[^}]+}}/g, function(m) {
    return replacements[m] || m;
});

Map:

var replacements = new Map([
    ["{{Name}}", "abc"],
    ["{{Address}}", "xyz"]
    // ...and so on...
]);

var result = data.replace(/{{[^}]+}}/g, function(m) {
    return replacements.get(m) || m;
});