Javascript разделить текст из файла в массив с помощью регулярных выражений на основе ДД / ММ / ГГГГ - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь разбить импортированный текстовый файл на массив, исходя из того, что каждая строка начинается с даты в формате ДД / ММ / ГГГГ. Я пытался использовать регулярные выражения для достижения этой цели:

flist = f.split(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/)

с f является строкой для разделения. Однако код запускается и создает массив, сохраненный в flist, а при запуске console.log(flist) он имеет только один элемент и не разделен.

редактирование:

Полный код:

const fs = require("fs")

f = fs.readFileSync("file.txt", "utf8")
let flist = f.split(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/g)
console.log(flist)

пример file.txt:

18/07/2018, 18:04 - Person2: message
18/07/2018, 18:04 - Person1: Yes
18/07/2018, 18:04 - Person2: That's good then
18/07/2018, 18:05 - Person1: message line 1
 message line 2
18/07/2018, 18:05 - Person2: text
18/07/2018, 18:05 - Person2: But nvm
18/07/2018, 18:06 - Person1: text

Таким образом, проблема с разделением на новую строку заключается в том, что новая строка не означает новое сообщение, однако я хочу, чтобы в моем массиве было каждое новое сообщение, поэтому необходимо, чтобы каждый новый элемент начинался с ДД / ММ / ГГГГ в процессе поиска. разделить это с помощью регулярного выражения, однако это не разделение / поиск соответствия.

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете разделить с

var flist = f.split(/(?=^\d{1,2}\/\d{1,2}\/\d{4})/m).filter(Boolean)

См. Демоверсию regex

Шаблон (?=^\d{1,2}\/\d{1,2}\/\d{4}) соответствует местоположению, которое находится прямо в начале строки (модификатор m заставляет ^ соответствовать началу строки), за которым следуют 1 или 2 цифры, /, 1 или 2 цифры, / и 4 цифры. Часть .filter(Boolean) удалит пустые элементы.

JS demo:

var f = "18/07/2018, 18:04 - Person2: message\n18/07/2018, 18:04 - Person1: Yes\n18/07/2018, 18:04 - Person2: That's good then\n18/07/2018, 18:05 - Person1: message \nine 1\n message line 2\n18/07/2018, 18:05 - Person2: text\n18/07/2018, 18:05 - Person2: \nut nvm\n18/07/2018, 18:06 - Person1: text";
var flist = f.split(/(?=^\d{1,2}\/\d{1,2}\/\d{4})/m).filter(Boolean);
console.log(flist);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...