我的JavaScript正则表达式不可靠

My javascript regex is unreliable

本文关键字:不可靠 正则表达式 JavaScript 我的      更新时间:2023-09-26

这是我正在使用的正则表达式

.match(/'[(.*)']'s*([^'s]+)'s*([^'s]+)'s*(.*)/)

并且当有另一个右方括号时,它无法正确捕获时间戳

[2016-01-22 22:14:58,098] WARN  service.catalog.MediaController  - foo1 foo foo foo foo foo
[2016-01-22 22:14:58,235] WARN  service.catalog.MediaController  - foo2 foo foo foo foo foo]; sdfd sf sd
[2016-01-22 22:14:58,240] INFO  service.catalog.RestAPIController  - foo3 foo foo foo] foo foo
[2016-01-22 22:14:58,259] INFO  service.catalog.DynamicRoutingController  - foo4 foo foo foo foo foo
[2016-01-22 22:14:58,457] ERROR service.catalog.BaseController  - foo5 foo foo foo foo foo

试试这个:

^'[(.*?)']

演示 - 正则表达式101

尝试通过

更紧密地匹配模式来使您的正则表达式更具限制性。

例如,对于开头的时间戳,请使用如下内容:

'['d{4}-'d'd-'d'd 'd'd:'d'd:'d'd,'d'd'd']

这样,您将确保没有误报匹配

您的时间戳似乎具有直接的布局,为什么不明确捕获它:

var regex = /'['d{2,4}-'d{2}-'d{2}'s+'d{2}:'d{2}:'d{2}(?:,|.)'d+']/;
'[2016-01-22 22:14:58,235] WARN  service.catalog.MediaController  - foo2 foo foo foo foo foo]; sdfd sf sd'.match(regex) // -> ["[2016-01-22 22:14:58,235]"]

我为这一年包括了 2 位而不是 4 位数字,并且您的毫秒由 、 或 .

这个正则表达式应该适合你:

/'[['d-'s:,]+]/gm

演示

PD:你的选择不是坏主意,是最具体的,这很好:[(

''d''d''d''d-''d''d''d ''d''d:''d''d:''d''d,''d''d''d,''d''d''d)]
目前

还不清楚你想要实现什么。我的想法是'd{1,4}-'d{1,2}-'d{1,2} 'd{1,2}:'d{1,2}:'d{1,2},'d{1,3}.如果要捕获括号,请在表达式中添加'[']