我正试图为下面的文本创建一个正则表达式
[2021-11-15 23:43:41.867] INFO [Mule-util]nz.co.ha.mule.common.logging.CustomMessageLogger [[MuleRuntime].uber.02: [sample-logging-app].sample-logging-appFlow.CPU_LITE @4ffd3e60]: event:dd3aa370-466d-11ec-83a1-0ab55c0b0cf4 ||transactionID=null|txnState=start|apiDomain=system|apiLayer=system|customMessage=Im%20here%20at%202021-11-15%2023:43:41.866|direction=incoming|messageName=sample-loggin-app|messageType=sample-loggin-app|name=main|payloadIn=false||
这一次我有5组,但第四组应该分为2组,所以我总共应该有6组,如下
第1组:[2021-11-15 23:43:41.867]
第2组:信息
第3组:[Mule-util]abc.co.common.logging.CustomMessageLogger
第4组:[[MuleRuntime].uber.02:[sample-logging-appFlow.CPU_LITE@4fd3e60]:事件:
第5组:dd3aa370-466d-11ec-83a1-0ab55c0b0cf4
组-6:||transactionID=null |txnState=start|apiDomain=system|apiLayer=system|customMessage=Im%20here%20at%202021-11-15%2023:43:41.866| direction=incoming|messageName=sample loggin app|messageType=sample log gin app|name=main|payloadIn=false||
注:上述分组是预期的划分,因此目前第4组也持有第5组的值。有人能告诉我如何将小组一分为二吗?Regex Link可以在这里找到
我想要的原因是我试图使用sema-text logagent,它将每个组的值分配给一个变量。我不能修改现有的功能来从上面的组中读取部分有效负载,因为它目前正被其他系统使用。因此,我能做的唯一方法是通过regex将其划分为多个组,并分配给提供的一些字段。
我的代码:
var myString = "[2021-11-15 23:43:41.867] INFO [Mule-util]nz.co.ha.mule.common.logging.CustomMessageLogger [[MuleRuntime].uber.02: [sample-logging-app].sample-logging-appFlow.CPU_LITE @4ffd3e60]: event:dd3aa370-466d-11ec-83a1-0ab55c0b0cf4 ||transactionID=null|txnState=start|apiDomain=system|apiLayer=system|customMessage=Im%20here%20at%202021-11-15%2023:43:41.866|direction=incoming|messageName=sample-loggin-app|messageType=sample-loggin-app|name=main|payloadIn=false||";
var myRegexpStr = /^([[0-9]{4}-[0-9]{2}-[0-9]{2}s[0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{3}])s([A-Z]*)s*([a-zA-z[].0-9:-]*)s([0-9a-zA-Z@[].s-_:]*)?([s|S]+)/g;
var myRegexp = new RegExp(myRegexpStr);
var match = myRegexp.exec(myString);
console.log(match[1]); // [2021-11-15 23:43:41.867]
console.log(match[2]); // INFO
console.log(match[3]); // [Mule-util]nz.co.ha.mule.common.logging.CustomMessageLogger
console.log(match[4]); // [[MuleRuntime].uber.02: [sample-logging-app].sample-logging-appFlow.CPU_LITE @4ffd3e60]: event:dd3aa370-466d-11ec-83a1-0ab55c0b0cf4
console.log(match[5]); // ||transactionID=null|txnState=start|apiDomain=system|apiLayer=system|customMessage=Im%20here%20at%202021-11-15%2023:43:41.866|direction=incoming|messageName=sample-loggin-app|messageType=sample-loggin-app|name=main|payloadIn=false||
有很多方法可以实现这一点。一个可能的解决方案看起来像
^([d{4}-d{2}-d{2}sd{2}:d{2}:d{2}.d{3}])s+([A-Z]*)s+([a-zA-Z0-9[].:-]*)s+([w@[].s:-]*:)([a-fA-F0-9]{4}(?:[a-fA-F0-9]{4}-){4}[a-fA-F0-9]{12})s+([sS]*)$
请参阅regex演示。
主要部分是([w@[].s:-]*:)([a-fA-F0-9]{4}(?:[a-fA-F0-9]{4}-){4}[a-fA-F0-9]{12})
:
([w@[].s:-]*:)
-第4组:零个或多个字、@
、[
、]
、.
、:
、-
和空白字符,然后是一个:
字符([a-fA-F0-9]{4}(?:[a-fA-F0-9]{4}-){4}[a-fA-F0-9]{12})
-第5组:UUID模式