изменить файл с помощью 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');

});

Какое регулярное выражение будет работать или как лучше всего редактировать этот файл с помощью узла?


person Connor Leech    schedule 21.01.2014    source источник


Ответы (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();
person psyrendust    schedule 21.01.2014
comment
сэр, он заменяет только первую строку, я хочу заменить все (replaceAll() не работает)... - person user12449933; 16.08.2020

Это регулярное выражение должно работать: /^\.(.+)/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);
    });
});
person c.P.u1    schedule 21.01.2014