一行正则表达式,匹配所有用空格分隔的单词

时间:2019-10-10 14:07:12

标签: javascript regex regex-group

我正在尝试创建一个regEx,使其可以将上面的整行匹配为单独的组:

示例消息:2019-10-07 11:13:19.75   New York   America   INFO Server is connected. Server Id [34] Address [127.0.0.1:54266]

编辑:这些组由多个空格字符分隔,至少2个空格字符,但通常为3。

EDIT2:消息部分中的括号内的术语可能根本不会出现,或者一个可能没有另一个出现,或者可能以不同的顺序出现。

Group1:2019-10-07 11:13:19.75

Group2:New York

Group3:America

第4组:INFO

第5组:Server is connected. Server Id [34] Address [127.0.0.1:54266]

我还试图选择方括号([])内的任何内容,以及IP地址的特殊匹配情况。尽管不必在同一个正则表达式中包含它。但是如果可能的话会很好。

我已经能够匹配各个组,但是我似乎无法将它们全部排成一排。

这是我到目前为止所拥有的:

Group1:/[0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{2}/

Group2:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}.*)\S+/

Group3:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}.*\S.\s{3}).?\S+/

第4组:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}(.*\S.\s{3}){2}).?\S+/

第5组:/(?<=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{2}(.*\S.\s{3}){3}).*/

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为利亚姆和托马斯是正确的,只需将\s+拆分并修剪值即可。

但是我很好奇如何对它进行正则表达式...

尝试这个怪物:
(?<date>\d{4}-\d{2}-\d{2})\s+(?<time>\d{2}:\d{2}:\d{2}\.\d{2})\s+(?<city>(?:\S|\s(?!\s))*)\s+(?<country>(?:\S|\s(?!\s))*)\s+(?<level>INFO|WARN|ERROR)\s+(?<message>[^\[]+\[(?<serverid>\d+)\][^\[]+\[(?<serverip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5})\])

此处:regex101

答案 1 :(得分:1)

如果您知道分隔符至少是两个空格,请以split\s{2,}来结束您的操作:

const message = `2019-10-07 11:13:19.75   New York   America   INFO   Server is connected. Server Id [34] Address [127.0.0.1:54266]`;

const groups = message.split(/\s{2,}/g)
console.log(groups);