gpt4 book ai didi

Javascript Regex 使用键值对拆分日志行

转载 作者:行者123 更新时间:2023-11-29 16:07:05 25 4
gpt4 key购买 nike

我有一个像这样的日志

t=2016-08-03T18:47:26+0000 lvl=dbug msg="Event Received" Service=SomeService

我想把它变成一个像

这样的 javascript 对象
{
t: 2016-08-03T18:47:26+0000,
lvl: dbug
msg: "Event Received"
Service: SomeService
}

但是我无法想出一个正则表达式来检测日志行中的字符串“Event Received”。我想按空格拆分日志行,但由于字符串的原因,它要困难得多。

我正在尝试提出一个正则表达式来检测字段和参数,以便我可以隔离它们并用等号拆分。

最佳答案

我建议使用没有任何前瞻性的正则表达式:

var re = /(\w+)=(?:"([^"]*)"|(\S*))/g; 

参见 regex demo

重点是第一组 ((\w+)) 捕获属性名称,第二组和第三组作为替代分支放入非捕获“容器”中。可以检查它们的值,然后使用其中一个来填充对象。

图案细节:

  • (\w+) - 第 1 组(属性名称)匹配 1+ 个单词字符(来自 [a-zA-Z0-9_] 范围)
  • = - 等号
  • (?:"([^"]*)"|(\S*)) - 匹配以下两种选择之一的非捕获“容器”组:
    • "([^"]*)" - 一个引号,然后第 2 组捕获 " 以外的 0+ 个字符,和一个引号
    • | - 或者
    • (\S*) - 第 3 组捕获 0+ 个非空白符号。

var rx = /(\w+)=(?:"([^"]*)"|(\S*))/g;
var s = "t=2016-08-03T18:47:26+0000 lvl=dbug msg=\"Event Received\" Service=SomeService";
var obj = {};

while((m=rx.exec(s))!==null) {
if (m[2]) {
obj[m[1]] = m[2];
} else {
obj[m[1]] = m[3];
}
}
console.log(obj);

关于Javascript Regex 使用键值对拆分日志行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com