javascript - $split() (jsonata) 函数中的正则表达式给出“正则表达式匹配零长度字符串”为什么?
问题描述
我有一个如下所示的字符串文本,每当有新行并以日期 dd/mm/yyyy 开头时,我想拆分文本。
我在 javascript 中使用 jsonata $split() 函数。但是,我收到一个 jsonata 错误,因为以下“正则表达式匹配零长度字符串”。请帮助我如何解决这个问题。
text = "22/03/2012 intro 20/10/2019\n" +
"22/03/2012 body\n" +
"more body 22/04/2020\n" +
"22/03/2012 stuff more stuff"
$split(text , /\\r?\\n(?=(?:0[1-9]|[12][0-9]|3[01])[- \\/.](?:0[1-9]|1[012])[- \\/.](?:19|20)\\d\\d)/))
//I want the output to be [ "22/03/2012 intro 20/10/2019",
// "22/03/2012 body more body 22/04/2020",
// "22/03/2012 stuff more stuff]
// But my output now is [ "22/03/2012 intro 20/10/2019",
// "22/03/2012 body/n + more body 22/04/2020",
// "22/03/2012 stuff more stuff]
解决方案
利用
$split($replace(text, /(\r?\n)\s*\+\s*(?=\d{2}[- \/.]\d{2}[- \/.]\d{4})|\r?\n\s*\+\s*/g, '$1'), /\r?\n/)
见证明。
第一个$replace
删除加号和换行符,并在必要时替换为行尾。
一个$split
用回车+换行或换行分开。
推荐阅读
- r - 如何在 R 中的同一数据框中计算重叠的三天日志返回?
- javascript - 限制外部 CSS 对本地反应组件或 HTML 元素的影响
- debugging - 尝试使用 vscode 远程调试 C++ 时无法解绑
- javascript - react-dnd:如何将 DragSource 拖放到本机输入元素中
- sql - Oracle SQL:如何区分行组的列值?
- c# - 我应该为 ObservableCollection 中的每个项目创建一个 ViewModel
- json - 如何计算 React 中的相似数据?
- javascript - 在 Shiny 中选择选项时如何关闭汉堡菜单的下拉菜单
- android - Android上的后台重新连接参数
- c++ - 素数检查器不包括数字 10 的一些乘数