【问题标题】:how to fix TypeError: Cannot read property 'match' of undefined如何修复 TypeError:无法读取未定义的属性“匹配”
【发布时间】:2019-07-25 12:43:17
【问题描述】:

我正在过滤 nodejs 中的文本文件,“匹配”正则表达式在过滤后的数组上给了我错误

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 表达式打印过滤后的输出。

【问题讨论】:

  • 错误是什么?
  • 你不使用 filter() 的原因 ??
  • "data3[i] = data1[i].match(/[0-9]{13}/g);"给出 TypeError: Cannot read property 'match' of undefined.
  • 我想根据正则表达式匹配 (/[0-9]{13}/g) 将数据数组中的值过滤为 data1 数组。希望你能理解问题
  • 请运行此代码。这是最小的可重现代码,仅修改文件中的内容。

标签: javascript node.js regex pattern-matching


【解决方案1】:

问题是您只填写找到匹配项的索引

if (data[i].match .... ) { 数据1[i] = 数据[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))

【讨论】:

    【解决方案2】:

    使用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");
      }
    
    });
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 2022-01-05
      • 2022-01-01
      • 2021-10-03
      • 2021-10-28
      • 2022-01-12
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多