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