如何使用RegexP解析Node.js中的SVN输出?
我想解析subversion日志输出,获取过滤信息并将其存储在DB表中。不幸的是,Node.js没有svn包装器。我有修订id的修订号列、存储所有数据的文件列和写在消息中的另一个id。因为我对正则表达式非常陌生,所以我尝试从xml解析它,我们可以得到xml格式(--xml)的svn输出-到目前为止,我尝试过编写正则表达式模式,但没有成功。以下是我所拥有的:如何使用RegexP解析Node.js中的SVN输出?,regex,node.js,svn,Regex,Node.js,Svn,我想解析subversion日志输出,获取过滤信息并将其存储在DB表中。不幸的是,Node.js没有svn包装器。我有修订id的修订号列、存储所有数据的文件列和写在消息中的另一个id。因为我对正则表达式非常陌生,所以我尝试从xml解析它,我们可以得到xml格式(--xml)的svn输出-到目前为止,我尝试过编写正则表达式模式,但没有成功。以下是我所拥有的: var fs = require ('fs'); var fileName = "svnout.txt"; exports.svnpar
var fs = require ('fs');
var fileName = "svnout.txt";
exports.svnparse = function(req, res) {
fs.readFile(fileName, {encoding: 'utf-8'}, function (err, data) {
if(err) { throw err;
} else {
console.log(data.toString());
return res.send(parseSvn(data));
}
});
};
var parseSvn = function(data) {
var logs = data.split('------------------------------------------------------------------------');
var data = [];
logs = logs.slice(1, -1);
for (var log in logs) {
var pattern = '\r\nr(?P<rev>\d+)\s+\|\s+(?P<author>\w+)\s+\|\s+(?P<timestamp>.*?)\s||\s+(?P<messages>.*?)\s|';
var match = logs[log].match(pattern);;
data.push({rid: match[1], name: match[2], date: match[3], message: match[4]});
saveToDB(data);
}
return {logs: data};
};
var fs=require('fs');
var fileName=“svnout.txt”;
exports.svnpasse=函数(请求、恢复){
readFile(文件名,{encoding:'utf-8'},函数(err,data){
如果(错误){抛出错误;
}否则{
log(data.toString());
返回res.send(parseSvn(数据));
}
});
};
var parseSvn=函数(数据){
var logs=data.split('----------------------------------------------------------------------------------------');
var数据=[];
logs=logs.slice(1,-1);
for(var登录日志){
var模式='\r\nr(?P\d+)\s+\\\\\\\\\\\\\\\s+(?P\w+)\s+\\\\\\\\\\\s+(?P.*)\s+(?P.*);
var match=logs[log].match(模式);;
推送({rid:match[1],名称:match[2],日期:match[3],消息:match[4]});
saveToDB(数据);
}
返回{logs:data};
};
试试看,getLog
结果示例:
[
{
"$": {
"revision": "1"
},
"author": "dong",
"date": "2013-11-08T02:10:37.656902Z",
"msg": "init repo"
},
...
]
支持许多其他SVN命令,如添加、状态、提交、信息等
如果您想自己解析它,请尝试我是这样想的,以备将来参考:
var command = 'svn log '+ someSvnServerUrl + " -r {" + date + "}:{" + todate + "}" ;
var command = 'svn log --xml '+ someSvnServerUrl + " -r {" + date + "}:{" + todate + "}";
return exec(command, function(err, stdout) {
if (err) {
console.log("Error on svn get", err);
return cb(err);
} else {
return cb(null, parseSvn(stdout));
}