Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配组的Javascript正则表达式_Javascript_Regex_Replace_Match - Fatal编程技术网

匹配组的Javascript正则表达式

匹配组的Javascript正则表达式,javascript,regex,replace,match,Javascript,Regex,Replace,Match,我有一个多行日志文件,我正试图用正则表达式和javascript将其解析为更可读的文件,我曾将此问题用作参考,但得到了意想不到的结果 基本上,b记录“第一次”未定义的“第二次”,在这里我希望看到文件名作为第二次匹配 下面是我试图匹配的正则表达式和数据字符串的一个示例,结果是匹配 我正在尝试对匹配进行排序,以便文件名是第一个,然后是第一次匹配,然后是第二次匹配,有人能给我指出正确的方向吗 代码 var VIRTUAL = (function() { // Module globals va

我有一个多行日志文件,我正试图用正则表达式和javascript将其解析为更可读的文件,我曾将此问题用作参考,但得到了意想不到的结果

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

下面是我试图匹配的正则表达式和数据字符串的一个示例,结果是匹配

我正在尝试对匹配进行排序,以便文件名是第一个,然后是第一次匹配,然后是第二次匹配,有人能给我指出正确的方向吗

代码

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:

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

"(Time .*?)\\s(Filename .*?)\\s(Generated [^\\n]*)"
而替代者呢

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


您当前的方法不起作用,因为每个匹配都独立于前一个匹配;它找到它们的唯一原因是
g
标志。按照我的建议,匹配会一次找到组中的所有内容,并且一个
g
标志会使它在多行上工作。

kryptonideve,这个简单的代码可以完成它(请参见中的输出):


var subject='时间2014-05-22T10:39:04.890117+01:00文件名S140522DSS10002.xml::938C287EB522359B600F74B3140BB64生成日期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(主题);
如果(匹配!=null){
文件。写入(匹配[2]+“
”; 文件。写入(匹配[1]+“
”; 文件。写入(匹配[3]+“
”; }
这是如何工作的?


我们没有尝试多个匹配,而是用一个正则表达式来匹配所有内容,在捕获组1、2和3中捕获文件名和时间。

如果要在jsbin中记录
b
,您可以记录
a
b|c
@PaulS。a返回时间1,文件名,时间2我怎样才能访问文件名和时间?c是未定义的,文件名,未定义Hanks Paul。有没有办法修改它,使它忽略日志中的垃圾,只给我匹配的数据,我可以读取我的正则表达式?
<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>