很遗憾,Javascript不支持正则表达式中的\K
令牌,我正在寻找解决方法。
我的问题:
我有这个正则表达式:
Total statistics:\s+\K\d+
可以从这样的日志字符串中获得割草机的“驱动仪表”:
{"logSystem":[[2019,4,26,10,37,0,44872,"Battery Charge Started! 17.0°C
21.05Volt","#000099","normal"],[2019,4,26,10,37,0,44871,"Total statistics:
334418m, 23862min, blade on time: 21289min","#2E2EFE","bold"],
[2019,4,26,10,37,0,44870,"Current cut statistics: 2m, 0min, blade on time:
0min","#2E2EFE","bold"],
工作示例(但不在JS中)在这里: https://regex101.com/r/oL9gN5/11
其他提示:
仪表并不总是6个字符长,几年后可能是7个
有时字符串Total statistics:
在日志中出现两次,则需要第一个匹配项(较新的数据)。
为了阐明这一点:
在大多数情况下,我会使用JSON解析(并且您也应该使用),但是日志的其余部分大部分是无用的数据,我只需要一个数据点。割草机每次碰到障碍物或在区域边缘转弯时都会创建一个日志条目(我将其切除)。此外,它仅显示日志的最后100行,没有前进/后退的选项。
花了我一段时间才弄清楚此正则表达式,却发现它在JS(iobroker)中不起作用,这需要任何帮助!
答案 0 :(得分:1)
您可以使用此正则表达式从组1捕获数据,
Total statistics:\s+(\d+)
这里^.*?Total statistics:
确保将仅匹配第一个出现的Total statistics:
,然后匹配一个或多个空格,然后(\d+)
将捕获第一个分组模式中的数字。