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

One Line Regex, match all words separated by whitespace

我正在尝试创建一个正则表达式,可以将上面的整行匹配到单独的组中:

示例消息: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:消息部分中括号中的术语可能根本不会出现,或者一个可能没有另一个出现,或者它们可能以不同的顺序出现。

第 1 组:2019-10-07 11:13:19.75

第 2 组:New York

第 3 组:America

第 4 组:INFO

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

我还尝试 select 方括号 ([ ]) 内的任何内容以及 IP 地址的特殊匹配大小写。不过,这不必包含在同一个正则表达式中。但如果可以的话就更好了。

我已经能够匹配各个组,但我似乎无法在一行中完成所有操作。

这是我目前的情况:

第 1 组:/[0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{2}/

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

第 3 组:/(?<=\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}).*/

如有任何帮助,我们将不胜感激。

我认为 Liam 和 Thomas 是对的,只是除以 \s+ 和 trim 的值。

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

试试这个怪物:
(?<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

我认为你做得太过分了,如果你知道你的分隔符至少有两个空格,请按 \s{2,} 调整 split :

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);