JavaScript正则表达式符号出现
我对JS中的正则表达式有一些问题。我写了我的正则表达式:JavaScript正则表达式符号出现,javascript,regex,Javascript,Regex,我对JS中的正则表达式有一些问题。我写了我的正则表达式: /^([A-Z]+)\s+([^\s]+)\s+([^\s]+)\s(\[.*\])\s+(.+)$/g 但有一个例子给出了错误的结果: WARN 2016-01-19 13:17:32,051 [localhost-startStop-1] Duplicate property values for key Data\ Df : [ Date from] and [ Starting Day] 我希望正则表达式将字符串分成以下
/^([A-Z]+)\s+([^\s]+)\s+([^\s]+)\s(\[.*\])\s+(.+)$/g
但有一个例子给出了错误的结果:
WARN 2016-01-19 13:17:32,051 [localhost-startStop-1] Duplicate property values for key Data\ Df : [ Date from] and [ Starting Day]
我希望正则表达式将字符串分成以下几个部分:
WARN
2016-01-19
13:17:32,051
[localhost-startStop-1]
Duplicate property values for key Data\ Df : [ Date from] and [ Starting Day]
除了最后两部分,一切都好。我得到了:
[localhost-startStop-1] Duplicate property values for key Data\ Df : [ Date from]
and [ Starting Day]
为什么??我想把字符串的这部分除以第一次出现的次数。不知道为什么需要第二次
PS:下面是一个例子:
谢谢。您需要限制
*
(尽可能多地匹配除换行以外的零个或多个字符)与匹配除换行以外的零个或多个字符的延迟点匹配*?
,尽可能少:
^([A-Z]+)\s+([^\s]+)\s+([^\s]+)\s(\[.*?\])\s+(.+)$
^^^
看
您还可以通过将[^\s]
替换为\s
来稍微缩短模式:
^([A-Z]+)\s+(\S+)\s+(\S+)\s(\[.*?\])\s+(.+)$
var re=/^([A-Z]+)\s+(\s+)\s+(\s+)\s(\[.*?\])\s+(.+)$/gm;
var str='INFO 2016-01-20 08:03:21113[C3P0PooledConnectionPoolManager[identityToken->1bqu9pa9eq1cqr515yzwu7 | 6c240779]-已建立与“rander”的HelperThread-#0]连接。正在通知侦听器…\nWARN 2016-01-19 13:17:32051[localhost-startStop-1]关键数据的重复属性值[Df:[Date from]和[start Day];
while((m=re.exec(str))!==null){
document.body.innerHTML+=“”+JSON.stringify([m[1],m[2],m[3],m[4],m[5]],0,4)+“”;
}
您可以尝试以下方法:
^(.*?)(\s*?)(\s*?)(\s*?)(\s*?)(\s*?)(\[.*?))(\s*)(.*?)$
更改\S
表示不是sapce\S
意味着获得更少?
- 这个句子的规则可以表达如下
它必须先找到begin+word+space+word+space+word+space+word+space+word+space+word+end
,所以我们使用]
来找到它。 如果你想改变这个句子的格式,你可以用?
或其他($1)\r($3)\r($5)\r($7)\r($9)
/g
与/m
一起使用。如果没有/m
,/g
就没有意义,因为模式锚定在开始和结束处。然后需要依赖延迟点匹配。我更新了答案。顺便说一句,您也可以在那里使用\S+
,因为[…]
中的字符串不包含空格。这是一个问题,因为有时它可能包含空格符号。例如:ERROR 2016-01-20 00:15:00352[GroovyScriptJob:eventGenerator-47]作业执行过程中出现异常,但乍一看,现在效果很好。目前我看不出有任何错误,没关系。不会有这样的事情