2014-01-21 27 views
5

我有一个文本文件,它看起来像这样修改文件:如何使用Node.js

./4F6cFLnAAFc.png 
./4Flj9plmKGQ.png 
./4fQeHtSdw80.png 
./4I9iibPLdBw.png 
./4J-dRA3MGc8.png 
./4mdEsouIXGM.png 
./4-_-wQc3EGE.png 
./595Tiga1gIg.png 
./60u_ctp6UIw.png 
./64bH_27Ehoc.png 
./64_ZfIemRGM.png 
./66pQLO--Ghk.png 
./69rDtSpshAw.png 
./69-YUSazuic.png 

我想在每行的开头“myString的”使用node.js中更换.因此,每个将最终看起来像︰myString/4F6cFLnAAFc.png

我想使用正则表达式,但我怀疑它可以完成使用读取和写入流。

var fs = require('fs'); 

fs.readFile('filelist.txt', 'utf-8', function(err, data){ 
    if (err) throw err; 

    console.log(typeof(data)); // string 

    data.replace(/\.\/+/, 'myString'); 

}); 

什么正则表达式将工作或什么是使用节点编辑此文件的最佳方式是什么?

回答

24

这里有两种选择同步或异步取决于你想要什么。

var fs = require('fs'); 

function readWriteAsync() { 
    fs.readFile('filelist.txt', 'utf-8', function(err, data){ 
    if (err) throw err; 

    var newValue = data.replace(/^\./gim, 'myString'); 

    fs.writeFile('filelistAsync.txt', newValue, 'utf-8', function (err) { 
     if (err) throw err; 
     console.log('filelistAsync complete'); 
    }); 
    }); 
} 

function readWriteSync() { 
    var data = fs.readFileSync('filelist.txt', 'utf-8'); 

    var newValue = data.replace(/^\./gim, 'myString'); 

    fs.writeFileSync('filelistSync.txt', newValue, 'utf-8'); 

    console.log('readFileSync complete'); 
} 

readWriteAsync(); 
readWriteSync(); 
2

此正则表达式应该工作:/^\.(.+)/gm

它执行了以周期(^\.),捕捉任何跟随期((.+))开头的行一个全球性的,多行匹配(/gm)和替换整个'myString'与所捕获的值连接的字符串($1)。

var fs = require('fs'), 
fileList = '/filelist.txt'; 

fs.readFile(fileList, function(err, data) { 
    if(err) throw err; 
    data = data.toString(); 
    data = data.replace(/^\.(.+)/gm, 'myString$1'); 
    fs.writeFile(fileList, data, function(err) { 
     err || console.log('Data replaced \n', data); 
    }); 
});