正则表达式在循环中的第一场比赛中停止

时间:2014-05-26 10:25:32

标签: javascript arrays regex loops exec

我有一个下面显示的正则表达式和一个while循环来迭代数据,但正则表达式在第一次匹配后停止,我希望它继续,直到找不到更多。

我有全局和多线设置。有没有人有任何想法?我不知所措!

此bin http://jsbin.com/manej/8/edit?js,console,output说明了以下代码的行为,该代码将首次返回Filename Last Time。任何帮助都会受到大力赞赏!

var regex = new RegExp( '(\\d{2}:\\d{2}:\\d{2}).*?([0-9a-z]+\\.xml).*?(\\d{2}:\\d{2}:\\d{2})', 'gmi' ), out = [];

      while ( ( match = regex.exec( data ) ) !== null ) {

        out.push(match[2], match[3], match[1]);  
          return out;  
      }

var 数据是: -

时间2014-05-22T10:39:04.890117 + 01:00文件名S140522DSS10002.xml :: 938c287eb522359b600f74bb3140bb64生成2014-05-22T10:38:46.0​​00000 + 01:00 时间2014-05-22T10:39:04.890117 + 01:00文件名S140522DSS10001.xml :: d525814afc7f9c92e7709d9a2ec46803生成2014-05-22T10:38:31.000000 + 01:00 时间2014-05-22T10:39:33.908891 + 01:00文件名S140522DSS10005.xml :: 54df47de51346319d5064ed5c380ace1生成2014-05-22T10:39:11.000000 + 01:00 时间2014-05-22T10:39:33.908891 + 01:00文件名S140522DSS10004.xml :: a109662fad39b9a9ada2d8d5968c55ed生成2014-05-22T10:39:09.000000 + 01:00 时间2014-05-22T10:39:33.908891 + 01:00文件名S140522DSS10003.xml :: 0a15d6558032cdfdd3cab2ca4a723694生成2014-05-22T10:39:03.000000 + 01:00 时间2014-05-22T10:40:03.896013 + 01:00文件名R140522DSS10001.xml :: ffd98e7e99625a957370f4ed03de8612生成2014-05-22T10:39:55.000000 + 01:00 时间2014-05-22T10:42:33.896617 + 01:00文件名S140522DDG10001.xml :: d7010a49dd39731ef05e1452314a84d1生成2014-05-22T10:42:21.000000 + 01:00 时间2014-05-22T10:43:03.899967 + 01:00文件名S140522DDG10002.xml :: 7297c9e66cd418eabee94cba8a464df7生成2014-05-22T10:42:36.000000 + 01:00 时间2014-05-22T10:43:03.899967 + 01:00文件名S140522DDG10003.xml :: e4e1071794e586bf10350dcb073d0662生成2014-05-22T10:42:53.000000 + 01:00 时间2014-05-22T10:43:34.196675 + 01:00文件名S140522DDG10004.xml :: b520bc560e0d117520620d782c0e9ce0生成2014-05-22T10:42:59.000000 + 01:00

2 个答案:

答案 0 :(得分:2)

return语句应该在循环之外:

var regex = new RegExp( '(\\d{2}:\\d{2}:\\d{2}).*?([0-9a-z]+\\.xml).*?(\\d{2}:\\d{2}:\\d{2})', 'gmi' ), out = [];

while ( ( match = regex.exec( data ) ) !== null ) {
    out.push(match[2], match[3], match[1]);  
}

return out;  

答案 1 :(得分:1)

使用while循环之外的返回

var regex = new RegExp( '(\\d{2}:\\d{2}:\\d{2}).*?([0-9a-z]+\\.xml).*?(\\d{2}:\\d{2}:\\d{2})', 'gmi' ), out = [];

      while ( ( match = regex.exec( data ) ) !== null ) {

        out.push(match[2], match[3], match[1]);  

      }
return out;