我有一个带有一些文本的文件,需要替换其中的一些字符串。我有一个数组,其中包含需要查找和替换的字符串,另一个数组包含替换字符串。
fs.readFile("./fileName.L5X", "utf8", function(err, data){
if(err){return console.log(err)}
var result = data.replace(searchStrings[1], replacementStrings[1]);
//write the replacement result into file
fs.writeFile("./fileName.L5X", result, "utf8", function(err){
if(err){return console.log(err)}
})
})
此代码仅替换与searchStrigns [1]匹配的第一个字符串。我试图创建一个RegExp对象并将其用作搜索字符串,但它不会替换该字符串或引发任何错误。 searchStrings [1]将包含诸如“ B11 [1] .0”之类的字符串。
这是我使用RegExp对象尝试过的代码:
fs.readFile("./fileName.L5X", "utf8", function(err, data){
if(err){return console.log(err)}
var re = new RegExp(searchStrings[1], "g")
var result = data.replace(re, replacementStrings[1]);
//write the replacement result into file
fs.writeFile("./fileName.L5X", result, "utf8", function(err){
if(err){return console.log(err)}
})
})
我还需要遍历searchStrings数组并查找/替换在fileName.L5X中找到的字符串,但是将上述代码放入循环中似乎只能替换文件中searchStrings的最后一个元素。
这是我尝试循环查找/替换过程的一个示例:
fs.readFile("./fileName.L5X", "utf8", function(err, data){
if(err){return console.log(err)}
for(var n= 1; n <= searchStrings.length - 1; n++){
var result = data.replace(searchStrings[n], replacementStrings[n]);
}
//write the replacement result into file
fs.writeFile("./fileName.L5X", result, "utf8", function(err){
if(err){return console.log(err)}
})
})
如何遍历searchStrings中的每个字符串并将其替换到文件中?
答案 0 :(得分:1)
我宁愿使用自定义替换器构建一个正则表达式:
from PIL import Image
def blend_images():
image1 = Image.open()
image2 = Image.open()
Image.blend(image1,image2).save()
那样,数据仅被遍历一次。
如果要使用循环,请以这种方式覆盖 var re = new RegExp(searchStrings.join("|"), "g")
var result = data.replace(re, it => replacementStrings[searchStrings.indexOf(it)]);
而不是data
,在下一次迭代时,替换的版本将被进一步替换:
result
答案 1 :(得分:0)
我设法解决了这个问题,但是根本没有优化。这是在两个数组之间循环并在文件上执行查找/替换的工作代码:
fs.readFile("./fileName.L5X", "utf8", function(err, data){
if(err){return console.log(err)}
for(var n= 1; n <= searchStrings.length - 1; n++){
while(data.includes(searchStrings[n])){
data = data.replace(searchStrings[n], replacementStrings[n]);
}
}
//write the replacement result into file
fs.writeFile("./fileName.L5X", data, "utf8", function(err){
if(err){return console.log(err)}
})
})
使用while循环会使代码运行缓慢。在这种情况下,searchString数组可容纳7500个字符串,并且fileName.L5X也很大(大约6MB)。
如果有更好的操作方法,请发布。