我正在过滤nodejs中的文本文件,“ match”正则表达式给我过滤后的数组错误
var fs = require("fs");
var finalarray = [];
var data = [];
var data1 = [];
fs.readFile('dataforparsing', function (err, buf) {
finalarray = buf.toString();// convert the object into the string
data = finalarray.split("\n");// splitting based on new line
for (i = 0; i < data.length; i++) {
if (data[i].match(/sessionid:/g) && !data[i].match(/Input/g)) {// filtering of the rows
data1[i] = data[i].toString();
console.log(data1[i] + "\n");
}
}
var data3 = [];
for (i = 0; i < data1.length; i++) {
data3[i] = data1[i].match(/[0-9]{13}/g);
console.log(data3[i] + "\n");
}
});
期望代码也应该在最后一个循环中工作,但是它在“ data1 [i] .match(..)”处给出错误,并根据REGEX表达式打印过滤后的输出。
答案 0 :(得分:1)
问题是您仅填写找到匹配项的索引
if(data [i] .match ....){ data1 [i] = data [i] .toString(); <-我杀了你 }
因此,当您没有比赛时,您就会拥有
data[0] -- match
data[1] -- undefined
data[2] -- match
您要使用push()而不设置索引
data1.push(data[i]);
但是最后您只是重写filter()
var data1 = data.filter(item => item.match(/sessionid:/g) && !item.match(/Input/g))
答案 1 :(得分:0)
在此循环中,data
中的任何项如果不符合if
条件,将在该索引i
上有一个 hole 。
for (i = 0; i < data.length; i++) {
if (data[i].match(/sessionid:/g) && !data[i].match(/Input/g)) {
data1[i] = data[i].toString();
console.log(data1[i] + "\n");
}
}
您可以分配到data1[i] = ...
数组,而不是分配data1
。现在,每个索引都会有一些价值
data1.push(data[i].toString())
答案 2 :(得分:0)
使用Arrays's push方法设置data1数组元素。
var fs = require("fs");
var finalarray = [];
var data = [];
var data1 = [];
fs.readFile('dataforparsing', function (err, buf) {
finalarray = buf.toString();// convert the object into the string
data = finalarray.split("\n");// splitting based on new line
for (i = 0; i < data.length; i++) {
if (data[i].match(/sessionid:/g) && !data[i].match(/Input/g)) {// filtering of the rows
data1.push(data[i].toString());
}
}
var data3 = [];
for (i = 0; i < data1.length; i++) {
data3[i] = data1[i].match(/[0-9]{13}/g);
console.log(data3[i] + "\n");
}
});
希望这会有所帮助。