在javascript中过滤文件中的特定行

在javascript中过滤文件中的特定行,javascript,node.js,json,Javascript,Node.js,Json,我有这个txt文件 ------------------------------------------------------------------------- Version : 2.3 Date : 2019-06-21 New Features: ------------- ID : 1P des : toto ID : 2P des : tata Fixed Bugs: ----------- ID

我有这个txt文件

-------------------------------------------------------------------------

Version : 2.3
Date    : 2019-06-21

New Features:
-------------
ID        : 1P
des       : toto

ID        : 2P
des       : tata

Fixed Bugs:

-----------
ID        : 2D
des       : lala

-------------------------------------------------------------------------

Version : 2.2
Date    : 2019-06-21

New Features:
-------------
ID        : 1O
des       : toto

ID        : 2o
des       : tata

Fixed Bugs:

-----------
ID        : 2O
des       : lala

-------------------------------------------------------------------------

Version : 2.1
Date    : 2019-06-21

New Features:
-------------
ID        : 1E
des       : toto

ID        : 2E
des       : tata

Fixed Bugs:

-----------
ID        : 2D
des       : lala

-------------------------------------------------------------------------


Version : 2.0
Date    : 2019-06-21

New Features:
-------------
ID        : 1P
des       : toto

ID        : 2P
des       : tata

Fixed Bugs:

-----------
ID        : 2D
des       : lala
我有一个test.js文件:

// Some script 
diffList.push({
                components: element,
                newVersion: listComponentsFromHead[key],    //2.3
                oldVersion: listComponentsFromLastTag[key], // 2.1
            });

diffList.forEach((element) => {
try {
    const data = fs.readFileSync('file.txt', 'UTF-8');
    const lines = data.split('\n');
    lines.forEach((line) => {
        if(line.startsWith("Version : " + element.newVersion)){
                console.log(line);
        }
    });
} catch (err) {
    console.error(err);
}
})
现在,我正在解析并只得到所有以版本开头的行

下一步我需要做的是检索newVersion和OldVersion之间数组中的所有ID

例如,在我的例子中,在2.3和2.1之间,我想要这样的东西:

  • [1P,2P,2D,1O,2O,2O,1E,2E,2D]
1)找到新版本行后,准备好读取id行(比如parseMode)
2) 在解析模式期间,使用正则表达式提取
id
值并推送到数组
3) 当您找到旧版本行时,意味着您可以停止解析id值

此示例代码应该可以工作,请尝试替换您的
Try
块。希望这有帮助

const data = fs.readFileSync("file.txt", "UTF-8");
const lines = data.split("\n");
let parseMode = false;
const results = []; // array of arrays.
const arr = []; // array for one diff
lines.forEach(line => {
  if (line.startsWith("Version : " + element.newVersion)) {
    parseMode = true;
    arr.length = 0; // initialize arr to be empty
  } else if (line.startsWith("Version : " + element.oldVersion) && parseMode) {
    parseMode = false;
    results.push(arr);
  } else if (parseMode) {
    // extract the id using the regex.
    const id = line.match(/^ID\s+:\s(.+)/)[1];
    arr.push[id];
  }
});

console.log(results);

出现错误:“无法读取null的属性“1”您在regex@Siva Kondapi Venkataoh中所说的[1]是什么意思。很高兴听到@fzefzefzef.)