这是我使用
的正则表达式.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
答案 0 :(得分:4)
答案 1 :(得分:2)
尝试通过更紧密地匹配模式来使正则表达式更具限制性。
例如,对于开头的时间戳,请使用以下内容:
\[\d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d\]
这样你就可以确保没有误报匹配
答案 2 :(得分:1)
您的时间戳似乎有一个直接的布局,为什么不明确捕获它:
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位数字,你的毫秒被分隔,或者。
答案 3 :(得分:1)
你想要实现的目标并不是很清楚。我的想法是\d{1,4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2},\d{1,3}
。如果您想捕获括号,请将\[
和\]
添加到表达式中。
答案 4 :(得分:1)
这个正则表达式适合你:
/\[[\d-\s:,]+]/gm
PD:你的选择不错,最具体的可能是,这很好:[(\ d \ d \ d \ d- \ d \ d- \ d \ d \ d \ d \ n :\ d \ d:\ d \ d,\ d \ d \ d)]