将logstring与正则表达式匹配

时间:2017-02-03 23:14:22

标签: regex monaco-editor

希望我在这里找到帮助,因为我真的没有关于正则表达式的线索。我正在尝试使用monaco editor创建一个日志文件查看器,我从这个示例开始,但我的日志字符串可以是多行的,我想使用不同的日期格式。假设我有一个这样的日志字符串:

[2017-02-03 22:07:56] [info] [Memory] After GC, total memory:737mb, used: 268mb, reclaimed: 293
[2017-02-03 22:10:15] [info] [Memory] After GC, total memory:705mb, used: 247mb, reclaimed: 141
[2017-02-03 22:10:25] [info] [Memory] After GC, total memory:705mb, used: 258mb, reclaimed: 21
[2017-02-03 22:14:34] [warn] [Evaluator] org.mozilla.javascript.EcmaError: Cannot convert null to an object.
   Caused by error in Business Rule: 'GlobalHideGlobalUsersFromNonAdmins' at line 5

      2: 
      3:    var encodedQueryString = 'sys_domain!=global';
      4:    
==>   5:    var imp = gs.getImpersonatingUserName().toString();
      6:    if(imp.length > 0) {
      7:        encodedQueryString = encodedQueryString + '^ORuser_name=' + imp;
      8:    }

[2017-02-03 22:14:34] [warn] [Evaluator] org.mozilla.javascript.EcmaError: Cannot convert null to an object.
   Caused by error in Business Rule: 'GlobalHideGlobalUsersFromNonAdmins' at line 1

==>   1: (function executeRule(current, previous /*null when async*/) {
      2: 
      3:    var encodedQueryString = 'sys_domain!=global';
      4:    

这当前与我的dateformat不匹配,如果有回车与下一个logmessage不匹配,它只会匹配logmessage的第一行。这里的任何RegexGuru可以帮助我吗? :)

monaco.languages.setMonarchTokensProvider('log', {
  tokenizer: {
    root: [
      [/\[error.*/, "custom-error"],
      [/\[warn.*/, "custom-warn"],
      [/\[info.*/, "custom-info"],
      [/\[debug.*/, "custom-debug"],
      [/\[[a-zA-Z 0-9:]+\]/, "custom-date"],
    ]
  }
});

更新 所以这是我提出的解决方案。显然我仍然无法匹配[DATE]字符串之间的多行。所以现在我将匹配,例如[错误]作为解决方法。也许有人可以把我推向正确的方向......

monaco.languages.setMonarchTokensProvider('log', {
  tokenizer: {
    root: [
      [/\[error\]/, "custom-error"],
      [/\[warn\]/, "custom-warn"],
      [/\[info\]/, "custom-info"],
      [/\[debug\]/, "custom-debug"],
      [/^\[\d{4}[./-]\d{2}[./-]\d{2} \d{2}[./:]\d{2}[./:]\d{2}]/, "custom-date"],
    ]
  }
});

1 个答案:

答案 0 :(得分:2)

我认为您可能在更新中的模式末尾错过了一个转义 - 对于结束括号应该是“]”。

这是一个更严格的模式,提取所有共享的数字子组:

\[(\d{2,4}[\:\-\s\]])+

你能举例说明在“两个[日期]字符串之间有多行的情况下你想要捕捉的内容吗?”

希望这有帮助!