【发布时间】: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