使用nodejs替换文件中的多个straings

时间:2017-11-07 09:07:31

标签: javascript arrays node.js fs newman

我有一个json文件,我想在其中使用节点js的fs将两个新单词替换为单词。我在Replace a straing 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);
  });

});

1 个答案:

答案 0 :(得分:1)

您需要对第一次替换的结果执行第二次replacedata未对replace进行更改。 replace 返回带有更改的新字符串。

所以:

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;
});