javascript - 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||
解决方案
有很多方法可以实现这一目标。一个可能的解决方案看起来像
^(\[\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 模式。
推荐阅读
- windows - 如何在不使用任何额外工具的情况下在 Windows 中创建大文件?
- reporting-services - 有没有办法在报表中为 Tablix 设置固定位置?
- git - 在 GitLab 中使用基于主干的方法添加审查选项
- database - Update by query with a clause in ElasticSearch
- python-3.x - Most "pythonic" way of populating a nested indexed list from a flat list
- git - Windows 上的 sh shell 脚本导致错误:/dev/tty: No such device or address
- charts - How to hide Google Charts hours from hAxis
- python-3.x - 我怎么知道今天是否是由于改变民用当地时间的一天,例如标准python和pandas时间戳中的夏令时?
- ms-access - 我想从 MS Access Query 中的交易表中获取期初和期末余额
- excel - 如何输入结果 % 以正确更改初始值?