Javascript 将纯文本解析为js数组-向第二个元素添加分隔符
我正在搜索如何将纯文本解析到js数组的解决方案。我已经找到了一些计划,我想这样做,但有点卡住了 纯文本的一部分:Javascript 将纯文本解析为js数组-向第二个元素添加分隔符,javascript,arrays,regex,split,Javascript,Arrays,Regex,Split,我正在搜索如何将纯文本解析到js数组的解决方案。我已经找到了一些计划,我想这样做,但有点卡住了 纯文本的一部分: 2017-11-08 09:43:49,153 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,293 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-0
2017-11-08 09:43:49,153 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,293 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,355 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}
/}\d{4}-\d{2}/
预期结果
const arr = [
'2017-11-08 09:43:49,153 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}',
'2017-11-08 09:53:02,293 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}',
'2017-11-08 09:53:02,355 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}'
]
正则表达式模式:
2017-11-08 09:43:49,153 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,293 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,355 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}
/}\d{4}-\d{2}/
每个区块以关闭对象“}”和开始新日期“YYYY-MM”结束
问题
plainText.split(/}\d{4}-\d{2}/)
如果我这样分割,它总是“吃掉”我的分隔符。是否有某种方法可以拆分文本并向拆分对中的第二个元素添加分隔符?然后我可以在第一个中添加“}”,然后从第二个中删除“}”。这是我正在考虑的解决方案,但也许您可以提出更好的建议。如果JSON数据不包含类似datetime的子字符串,您可以使用
s.split(/\b(?=\d{4}-\d{2}-\d{2}\s/).filter(Boolean)
或者更详细(为了安全起见):
见
关键是匹配类似datetime的字符串,但不使用它,因此,整个模式被包装在一个正向前瞻(?=…)
构造中
更长的图案细节
-单词边界\b
-正向前瞻模式的开始(?=
-类似日期的字符串(4位-2位-2位)\d{4}-\d{2}-\d{2}
-1个或多个空格\s+
-1个或多个数字,[\d:,]+
或/和:
,
-1个或多个空格\s+
-一个\[INFO]
子字符串[INFO]
-1+空格\s+
-根目录:
子字符串根目录:
-前瞻的结束)
s.split(/\b(?=\d{4}-\d{2}-\d{2}\s+[\d:,]+\s+\[INFO]\s+根:)/)。过滤器(布尔值)
。如果需求不严格,则缩短模式(取决于场景,如果日期字符串未出现在JSON数据中,则模式甚至可以是/\b(?=\d{4}-\d{2}-\d{2}\s/
).See.@melpomen这是我正在使用的api的响应。我无法控制它获取答案的形式。@WiktorStribiżew谢谢!它可以工作!我会稍微修改它以接受不同的标志,但无论如何它解决了我的问题!:DThank you!Solved!