首页 > 解决方案 > javascript正则表达式映射到不同的组

问题描述

我正在尝试为以下文本创建一个正则表达式

[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 组,如下所示

第一组:[2021-11-15 23:43:41.867]

第 2 组:信息

第 3 组:[Mule-util]abc.co.common.logging.CustomMessageLogger

第 4 组:[[MuleRuntime].uber.02:[sample-logging-app].sample-logging-appFlow.CPU_LITE @4ffd3e60]:事件:

第 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-登录应用程序|消息类型=示例登录应用程序|名称=主要|有效负载=假||

注意:上述组是预期的划分,因此当前 Group-4 也持有 group-5 的值。谁能让我知道如何将组分成两部分,可以在这里找到正则表达式链接

我想要拥有的原因是我正在尝试使用 sema-text logagent 将每个组的值分配给一个变量。我无法修改现有功能以从上述组中读取部分有效负载,因为它当前正被其他系统使用。所以我能做的唯一方法是通过正则表达式,它将它分成组并分配给提供的一些字段。

我的代码:

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||

标签: javascriptregex

解决方案


有很多方法可以实现这一目标。一个可能的解决方案看起来像

^(\[\d{4}-\d{2}-\d{2}\s\d{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+([\s\S]*)$

请参阅正则表达式演示

主要部分是([\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 模式

推荐阅读