我的JavaScript正则表达式不可靠
My javascript regex is unreliable
这是我正在使用的正则表达式
.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{1,4}-'d{1,2}-'d{1,2} 'd{1,2}:'d{1,2}:'d{1,2},'d{1,3}
.如果要捕获括号,请在表达式中添加'[
和']
。
相关文章:
- 使用不带正则表达式的jscript验证电子邮件地址
- 不使用正则表达式的字符串字数
- 只允许整数和十进制数字textbow jquery(不带正则表达式)
- 如何在不使用正则表达式的情况下从 JavaScript 中的字符串中删除 HTML 标记
- 使用 javascript 查找文本中 HTML 标签的位置,最好不使用正则表达式
- 为什么这个JavaScript不能取代工作?(不包含正则表达式)
- Javascript:如何不将正则表达式与BB代码混淆
- 仅包含有效字符的字符串,不带正则表达式
- 不使用正则表达式的表单密码验证
- 不带正则表达式的JavaScript titleCase函数
- 如何在不使用正则表达式的情况下使用javascript在数组中搜索字符串
- 我可以显示普通字符而不是正则表达式吗?
- PHP正则表达式不工作,返回主题字符串而不是正则表达式结果
- 如何使用或不使用正则表达式获得两个花括号之间的所有内容
- 不匹配正则表达式
- 如何在不使用正则表达式的情况下在javascript中剥离HTML
标签
- 如果子字符串不在正则表达式中,则用双引号括起来
- 字符串解密:不匹配)正则表达式
- 使用正则表达式而不创建正则表达式对象-JavaScript
- Javascript正则表达式匹配模式,但不匹配正则表达式文本(r.js优化器和uglify问题)