[英]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.