Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用存储查找字符串的数组和存储替换字符串的数组替换文件中的字符串_Javascript_Node.js_Fs - Fatal编程技术网

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

Javascript 使用存储查找字符串的数组和存储替换字符串的数组替换文件中的字符串,javascript,node.js,fs,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]); //wr

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

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对象并将其用作搜索字符串,但它不会替换字符串或抛出任何错误。SearchString[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)}
    })
})
fs.readFile(“./fileName.L5X”,“utf8”,函数(错误,数据){
if(err){return console.log(err)}

对于(var n=1;n我宁愿使用自定义替换程序构建一个正则表达式:

  var re = new RegExp(searchStrings.join("|"), "g")
    var result = data.replace(re, it => replacementStrings[searchStrings.indexOf(it)]);
这样,数据只被遍历一次

如果要使用循环,请覆盖
数据
,而不是
结果
,这样,替换的版本将在下一次迭代中进一步替换:

 for(var n= 1; n <= searchStrings.length - 1; n++){
    data = data.replace(new RegExp(searchStrings[n], "g"), replacementStrings[n]); 
 }   

for(var n=1;n我已经设法解决了这个问题,但它根本没有得到优化。下面是循环两个数组并对文件执行查找/替换的工作代码:

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)}
    })
})
fs.readFile(“./fileName.L5X”,“utf8”,函数(错误,数据){
if(err){return console.log(err)}

对于(var n=1;n),我不确定我是否理解第一位代码。我尝试了它,并将结果传递给writeFile,但没有对文件进行更改。最后一位代码能够在每个字符串第一次出现时进行更改。正如您提到的,在我的代码中,我需要覆盖数据而不是结果。