【问题标题】:Replace different strings in file from an object in nodejs从nodejs中的对象替换文件中的不同字符串
【发布时间】:2021-10-08 18:59:35
【问题描述】:

我有一个文件,我试图用一个对象中的其他字符串替换多个字符串。

目前我有以下:

fs.readFile('myfile.txt', 'utf8', function(err, data) {
  let formatted
  for (var key in obj){
     let re = new RegExp('(?<=config.' + key + ' = ).*(?=)', 'g');
     formatted = data.replace(re, `'${obj[key]}'`)
   }
   fs.writeFile('myfile.txt', formatted, 'utf8', function(err) {
     if (err) return console.log(err);
   })
})

这可行,但是 writeFile 每次都会覆盖整个文件,因此只有一个字符串最终被更改并在循环结束时保存,而不是全部保存。有没有一种方法可以一次添加所有更改?

我尝试过使用 replace 并执行类似我见过的其他答案的操作。

  let regexStr = Object.keys(obj).join("|")
  let re = new RegExp(`(?<=config.${regexStr}+[ ]=).*(?=)`, 'g')
  let format = data.replace(re, match => obj[match]);

除非我使用regexStr 而不是re,否则这似乎不起作用。但是,我需要re 中显示的特定正则表达式。

我也试过

    let result = data.replace(re, function (match, key, value){
       obj[key] = value || key
      })

但这只会导致未定义。

有没有办法调整该替换以使其正确?或者可能是读取文件,循环遍历整个内容,然后将其全部写入更改?

【问题讨论】:

  • "... 但是 writeFile 每次都会覆盖整个文件" - 它不是 writeFile,它是您在 for 循环的每次迭代中将变量“格式化”分配给新键的方式。跨度>

标签: javascript node.js loops object replace


【解决方案1】:

试试这个,这将替换文件中的所有内容,然后写回更新内容。

fs.readFile('myfile.txt', 'utf8', (readErr, data) => {
    if(readErr) {
        return console.log(readErr);
    } else {
        for (var key in obj){
            let re = new RegExp(`(?<=config.${key} = ).*(?=)`, 'g');
            data = data.replace(re, `'${obj[key]}'`); 
        }
        fs.writeFile('myfile.txt', data, 'utf8', (writeErr) => {
            if(writeErr) {
                return console.log(writeErr);
            } else {
                console.log('File was writen');
            }
        });
    }
});

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 2021-11-18
    • 2015-07-31
    • 2018-04-19
    • 1970-01-01
    • 2019-03-31
    • 2020-10-19
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多