2

我有一个 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);
  });

});
4

1 回答 1

3

您需要对replace第一次替换的结果执行第二次。data不改变replacereplace 返回一个带有更改的新字符串。

所以:

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

...然后写入result文件。

或者,如果它是一个大文件或者您有很多不同的东西要替换,这特别有用,请使用带有回调的单个: 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;
});
于 2017-11-07T09:10:43.077 回答