解析反击日志

时间:2015-12-31 12:47:56

标签: javascript regex

我通过nodejs实时分析反恐精英服务器日志。 该脚本的目标是接收日志,解析它们并根据日志包含的内容在服务器上执行操作。

这很好用,但是现在,脚本正在拆分每个日志行以找到所需的信息(用户,操作)。 我希望脚本用正则表达式解析日志,正则表达式和我不是朋友......

我做了一个fiddlejs示例:https://jsfiddle.net/jeremyb/ea63g8tz/1/

var logs = [
    '13-12-2015<"U:1:2392398293"><T>say "go d2"',
    '13-12-2015<"U:1:6565233215"><T>say "crap"',
    '13-12-2015<"U:1:4548512145"><T>say "go inf"',
    '13-12-2015<"U:1:6565233215"><T>say "stuff"',
    '13-12-2015<"U:1:4548512145"><T>say "things"',
    '13-12-2015<"U:1:2392398293"><T>say "war rr"',
    '13-12-2015<"U:1:4548512145"><T>say "kick t"',
    '13-12-2015<"U:1:6565233215"><T>say "kick ct"',
    '13-12-2015<"U:1:6565233215"><T>say "kick all"'
];

for (var l = 0; l < logs.length; l++) {
    var log = logs[l],
        re = /<(.*)>/,
        test = log.match(re);
    for (var i = 0; i < test.length; i++) {
        add_log(test[i]);
    }
}

我不知道如何让用户(U:1:2392398293)以及另一个用户所说的内容(去d2)。

jquery的使用仅适用于小提琴,nodejs脚本中不需要它。

阅读的Thx!英语不是我的母语,对我来说很容易!

2 个答案:

答案 0 :(得分:2)

re = /<(.*?)>/

          ^^

让你的正则表达不贪婪

答案 1 :(得分:1)

一种天真的方法,仅适用于您提到的两种情况。

for (var l = 0; l < logs.length; l++) {
    var log = logs[l], re1 = /\<"(.*)"\>/, re2 = /say "(.*)"/ ;
    test = log.match(re1);
    console.log(test[1]);
    test = log.match(re2);
    console.log(test[1]);
}

OR

for (var l = 0; l < logs.length; l++) {
    var log = logs[l], re = /\<"(.*)"\>.*say "(.*)"/
    test = log.match(re);
    console.log(test[1] + ' , ' + test[2]);
}

我在浏览器控制台中替换你的循环部分后测试了它。