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

Posted

技术标签:

【中文标题】使用nodejs替换文件中的多个字符串【英文标题】:Replace multiple strings in a file using nodejs 【发布时间】:2018-04-19 14:43:37 【问题描述】:

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

这里是sn-p的代码:

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

);

【问题讨论】:

javascript 本身不支持正则表达式的递归匹配,也许你想为此使用一个库 【参考方案1】:

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

所以:

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

【讨论】:

嗨 Crowder,还有一个问题:我们可以一次替换多个文件中的这些字符串吗?就像一次写入多个文件一样。感谢您对此的见解。 @SauravRath:不能同时(除非你生成child processes 来这样做),但你当然可以循环。当心closures in loops problem。 不错的解决方案。具体来说,我喜欢.replace.replace 一个。感谢您的回答。

以上是关于使用nodejs替换文件中的多个字符串的主要内容,如果未能解决你的问题,请参考以下文章

用nodejs替换文件中的字符串

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

如何使用PowerShell替换文件中的多个字符串

替换多个文件中的多个字符串

Linux批量替换多个文件中字符串

如何在linux命令行中替换多个文件中的字符串