首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REGEX - JavaScript / Blockly

REGEX - JavaScript / Blockly
EN

Stack Overflow用户
提问于 2022-05-01 07:35:08
回答 1查看 89关注 0票数 1

我有两个(或更多)不同的出口从我们的系统的原始数据。我想通过使用正则表达式来区分它,而不使用IF foreach。

Bellow有两个例子:

  1. <14>Apr 29 10:00 NMBL:数组:NMBL类型:14883次:星期五10月29日10:00:00 2022#012 Id:8234目标:灵活性2版本:6.0.0.300-956221-选择消息:成功创建了与卷集合相关联的卷的快照2-nimble1 1同步复制伙伴池nimble1 2和池nimble1 1的调度测试。
  2. <14>May 1 00:53:01 2022#012 1- NMBL: Group:NMBL类型:1016时间:Sun5.00:53:01 2022#012 Id:9106对象Id:-对象:访问类型:su客户端IP:控制台状态:成功版本:6.0.0.300-956221-2022#012消息:将用户权限提升为管理

在第一个日志中,我只需要获得消息。但在另一种情况下,我需要获得对象、类型、客户端IP、状态、消息

我希望我需要使用?在regex中,但是我不知道如何不对每一种情况使用IF。

Blockly图像示例这里。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2022-05-01 09:26:08

如果我对你的理解是正确的,你有上面的条目作为字符串。

只有一个正则表达式,就很难做到这一点。就我个人而言,我更喜欢正则表达式和split()的混合,并尝试首先从它中生成一个正则对象。

类似于:

代码语言:javascript
复制
var entriesRaw = [
    '<14>Apr 29 10:00:00 nimble1-A NMBL: Array:nimblegroup Type:14883 Time:Fri Apr 29 10:00:00 2022#012 Id:8234 Target:nimble2-nimble1 Version:6.0.0.300-956221-opt Message:Successfully created a snapshot of the volumes associated with volume collection nimble2-nimble1 schedule test on synchronous replication partners pool-nimble2 and pool-nimble1.',
    '<14>May 1 00:53:01 nimble1-A NMBL: Group:nimblegroup Type:1016 Time:Sun May 1 00:53:01 2022#012 Id:9106 Object Id:- Object: Access Type:su Client IP:Console Status:Succeeded Version:6.0.0.300-956221-opt Message:Elevating user privilege to admin'
];

var entries = entriesRaw.map(function(entry) {
    return entry.split(/((?:Array|Client IP|Group|Id|Message|Object(?: Id)?|Status|Target|Time|Type|Version):)/g).reduce((acc, chunk, i, chunks) => {
        if(chunk.slice(-1) === ':' && i < chunks.length - 1) {
            var tmp = {};
            tmp[chunk.slice(0, -1)] = chunks[i + 1].trim();
            
            return Object.assign({}, acc, tmp);
        }
        
        return acc;
    }, {});
});

console.log(entries);

这样,您就可以将所有条目解析为具有键值对的对象数组,并且可以访问它们。

诀窍是在split()内部进行回溯,因为这样分割的块是结果数组的一部分。

条目的问题是,它们的语法很难解析,所以必须在正则表达式中将每个键作为文字字符串。

如果你需要额外的帮助,你可以随便问。:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72074836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档