我通过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!英语不是我的母语,对我来说很容易!
答案 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]);
}
我在浏览器控制台中替换你的循环部分后测试了它。