JavaScript 正则表达式符号出现

JavaScript regex symbol occurence

本文关键字:符号 正则表达式 JavaScript      更新时间:2023-09-26

我在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 = /^([A-Z]+)'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)或其他。