![](/img/trans.png)
[英]Regex (regular expressions), replace the second occurence in javascript
[英]JavaScript regex symbol occurence
我在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]
我希望正则表达式将字符串分成这样的部分:
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:这是示例: https : //regex101.com/r/wG5xV6/2
谢谢。
您需要使用与.*?
匹配的惰性点来限制.*
(与换行符相匹配的零个或多个字符,并尽可能地匹配) .*?
与换行符以外的零个或多个字符匹配,且尽可能少:
^([A-Z]+)\s+([^\s]+)\s+([^\s]+)\s(\[.*?\])\s+(.+)$
^^^
您还可以通过将[^\\s]
替换为\\S
稍微缩短模式:
^([A-Z]+)\s+(\S+)\s+(\S+)\s(\[.*?\])\s+(.+)$
var re = /^([AZ]+)\\s+(\\S+)\\s+(\\S+)\\s(\\[.*?\\])\\s+(.+)$/gm; var str = 'INFO 2016-01-20 08:03:21,113 [C3P0PooledConnectionPoolManager[identityToken->1bqu9pa9eq1cqr515yzwu7|6c240779]-HelperThread-#0] Connection to \\'rander\\' established. Notifying listeners...\\nWARN 2016-01-19 13:17:32,051 [localhost-startStop-1] Duplicate property values for key Data\\ Df : [ Date from] and [ Starting Day]'; while ((m = re.exec(str)) !== null) { document.body.innerHTML += "<pre>"+ JSON.stringify([m[1],m[2],m[3],m[4], m[5]], 0, 4) + "</pre>"; }
您可以尝试以下方法:
^(.*?)(\\s*?)(\\S*?)(\\s*?)(\\S*?)(\\s*?)(\\[.*?\\])(\\s*)(.*?)$
也改变\\S
用.
\\S
表示不安全。 ?
意味着得到更少。 这句话的规则可以表示如下
begin + word + space + word + space + word + space + word + space + word + end
它必须先找到]
,所以我们使用?
找到它。 如果要更改此句子的格式,则可以使用($1)\\r($3)\\r($5)\\r($7)\\r($9)
或其他替换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.