2

我正在尝试根据每行以 DD/MM/YYYY 格式的日期开头的事实将导入的文本文件拆分为一个数组。我尝试使用正则表达式来实现这一点:

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)

示例文件.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

所以用新行拆分的问题是新行并不意味着一条新消息,但是我希望我的数组成为每条新消息,因此需要每个新元素以 DD/MM/YYYY 开头,并且正在搜索以拆分使用正则表达式,但是它不会拆分/查找匹配项。

4

1 回答 1

1

你可以分开

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

查看正则表达式演示

(?=^\d{1,2}\/\d{1,2}\/\d{4})模式匹配位于行首的位置(m修饰符^匹配行首),后面跟着 1 位或 2 位数字/、1 位或 2 位数字/和 4 位数字。该.filter(Boolean)部分将删除空项目。

JS 演示:

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);

于 2018-08-28T23:39:25.683 回答