分析反击日志

Parse counter strike logs

本文关键字:日志 反击      更新时间:2023-09-26

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

这运行得很好,但现在,脚本正在拆分每个日志行,以查找所需的信息(用户、操作)。我希望脚本使用regex解析日志,而regex和我不是朋友。。。

我举了一个fiddlej的例子: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]);
    }
}

我不知道如何在一个var中输入用户(U:1:2392398293),并在另一个var(转到d2)中输入用户所说的内容。

jquery的使用仅限于fiddle,在nodejs脚本中不需要它。

感谢阅读!英语不是我的母语,对我宽容一点!

re = /<(.*?)>/
          ^^

使正则表达式成为非贪婪

一种简单的方法,只适用于您提到的两种情况。

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

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

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