次のようなテキストファイルがあります。
./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
Node.jsを使用して、各行の先頭の.
を 'myString'に置き換えます。したがって、それぞれは次のようになります: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');
});
どの正規表現が機能するか、またはnodeを使用してこのファイルを編集する最良の方法は何ですか?
必要に応じて、同期または非同期の2つのオプションを次に示します。
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();
この正規表現は機能するはずです:/^\.(.+)/gm
これは、ピリオド(/gm
)で始まるすべての行に対してグローバルな複数行一致(^\.
)を実行し、ピリオド((.+)
)に続くものをすべてキャプチャして、文字列全体をキャプチャされた値($1
)と連結された 'myString'。
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);
});
});