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
如何使用RegexP解析Node.js中的SVN输出?_Regex_Node.js_Svn - Fatal编程技术网

如何使用RegexP解析Node.js中的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

我想解析subversion日志输出,获取过滤信息并将其存储在DB表中。不幸的是,Node.js没有svn包装器。我有修订id的修订号列、存储所有数据的文件列和写在消息中的另一个id。因为我对正则表达式非常陌生,所以我尝试从xml解析它,我们可以得到xml格式(--xml)的svn输出-到目前为止,我尝试过编写正则表达式模式,但没有成功。以下是我所拥有的:

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));
    }