繁体   English   中英

Javascript正则表达式匹配组

[英]Javascript regex to matched group

我有一个多线日志文件,我试图用正则表达式和javascript解析为更可读的东西,我已经使用这个问题作为参考,但我得到意想不到的结果Javascript替换参考匹配组?

基本上b记录“第一次”未定义“第二次”我希望看到文件名作为第二次匹配。

下面是我要匹配的正则表达式和数据字符串的示例,这会导致匹配。 http://regex101.com/r/bW9xD4

我正在尝试订购匹配项,以便首先匹配文件名,然后是第一次匹配,然后是第二次匹配,是否有人能指出我正确的方向?

var VIRTUAL = (function() {
  // Module globals
  var $ = {}; 

  // Module methods
  $ = {
    compareDelivery : function( data ) {
      var regex = new RegExp( '(\\d{2}:\\d{2}:\\d{2})|([0-9a-z]+.xml)', 'gmi' ), out = [];

      var found = data.replace(regex, function ( a, b, c ) {
          console.log(a);  

      });

      return out;
    }

  };


  return $;

}());

JSBIN: http ://jsbin.com/manej/3/edit?js,console,output

通过查看您的数据,也许您可​​以使用这样的模式

"(Time .*?)\\s(Filename .*?)\\s(Generated [^\\n]*)"

和替换者

function ($0, time1, file, time2) {
    // .. do stuff
}

您当前的方法无效,因为每个匹配都与前一个匹配; 它找到它们的唯一原因是g标志。 我建议的方式,匹配一次在组中找到所有,并且g标志将使其在多行上工作。

KryptoniteDove,这个简单的代码就可以了(参见在线演示中的输出):

<script>
var subject = 'Time 2014-05-22T10:39:04.890117+01:00 Filename S140522DSS10002.xml::938c287eb522359b600f74bb3140bb64 Generated 2014-05-22T10:38:46.000000+01:00';
var regex = /Time.*?(\d{2}:\d{2}:\d{2}).*?([0-9a-z]*\.xml).*?(\d{2}:\d{2}:\d{2})/i;
var match = regex.exec(subject);
if (match != null) {
        document.write(match[2] + "<br>");
        document.write(match[1] + "<br>");
        document.write(match[3] + "<br>");
}
</script>

这是如何运作的?

我们不是尝试多个匹配,而是使用单个正则表达式匹配所有内容,捕获文件名和捕获组1,2和3中的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM