使用存储查找字符串的数组和存储替换字符串的数组替换文件中的字符串

时间:2019-07-01 22:27:39

标签: javascript node.js fs

我有一个带有一些文本的文件,需要替换其中的一些字符串。我有一个数组,其中包含需要查找和替换的字符串,另一个数组包含替换字符串。

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中的每个字符串并将其替换到文件中?

2 个答案:

答案 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)。

如果有更好的操作方法,请发布。