Archivo de texto a JSON, las últimas líneas no se incluyen en el resultado

Estoy leyendo un archivo de texto y lo estoy convirtiendo a formato JSON usando expresiones regulares en mi proyecto de reacción. Está funcionando bien pero no incluye las últimas 20-30 líneas del archivo de texto. Hay algún problema al convertirlo a JSON pero no puedo entender el problema.

Aquí está mi código:

readTextFile = file => { let rawFile = new XMLHttpRequest(); rawFile.open("GET", file, false); rawFile.onreadystatechange = () => { if (rawFile.readyState === 4) { if (rawFile.status === 200 || rawFile.status === 0) { let allText = rawFile.responseText; // console.log(allText) let reg = /\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])/g; let arr = []; let start = null; let line, lastSpacePos; let match; while ((match = reg.exec(allText)) != null) { if(start) { line = allText.slice(start, match.index).trim(); lastSpacePos = line.lastIndexOf(' '); arr.push({ date: line.slice(0, 19), text: line.slice(20, lastSpacePos).trim(), user_id: line.slice(lastSpacePos).trim() }); } start = match.index } console.log(arr); this.setState({ // text: JSON.stringify(arr) text: allText }); } } }; 

No estoy seguro sobre el problema con el código existente en la pregunta.

Para obtener el resultado esperado descrito en la Pregunta utilizando un enfoque alternativo, puede usar RegExp /\s{2,}|\n+/g para reemplazar los caracteres de espacio superiores a 2 y los nuevos caracteres de línea; /[\d-]+\s[\d:]+/g para obtener las fechas; /.+(?=\s\w+\s$|\s\w+$)|\w+\s$|\w+$/g para hacer coincidir el texto seguido de espacio, caracteres de palabra y carácter de espacio o final de cadena y caracteres antes de los caracteres de espacio seguidos de caracteres de palabras y caracteres de espacio o final de cadena; devuelve un objeto con una propiedad establecida para cada elemento de la matriz desde .map()

 let allText = `2014-06-01 23:07:58 President Resigns in Georgia's Breakaway Region of Abkhazia t.co/DAploRvCvV nytimes 2014-06-01 23:48:06 The NYT FlipBoard guide to understanding climate change and its consequences t.co/uPGTuYiSmQ nytimes 2014-06-01 23:59:06 For all the struggles that young college grads face, a four-year degree has probably never been more valuable t.co/Gjf6wrwMsS nytimes 2014-06-01 23:35:09 It's better to be a community-college graduate than a college dropout t.co/k3CO7ClmIG nytimes 2014-06-01 22:47:04 Share your experience with Veterans Affairs health care t.co/PrDhLC20Bt nytimes 2014-06-01 22:03:27 Abandon Hope, Almost All Ye Who Enter the NBA Playoffs t.co/IQAJ5XNddR nytimes`; // replace more than one consecutive space character and new line characters allText = allText.replace(/\s{2,}|\n+/g, " "); // get dates let dates = allText.match(/[\d-]+\s[\d:]+/g); // get characters that are not dates // spread `dates` to resulting array // return object let res = allText .split(/[\d-]+\s[\d:]+\s/) .filter(Boolean) .map((text, index) => [dates[index], ...text.match(/.+(?=\s\w+\s$|\s\w+$)|\w+\s$|\w+$/g)]) .map(([date, text, user_id]) => ({date, text, user_id})); console.log(res);