Javascript используя RegEx для получения нескольких строк - PullRequest
0 голосов
/ 15 февраля 2020

Я использовал код ниже, чтобы получать каждые 5 строк из внешнего текстового файла. Он работает нормально при тестировании с https://regex101.com/, но при работе на Javascript консоль возвращает только 3 строки. Кто-нибудь знает, в чем проблема, пожалуйста

Это также работает, если данные включены внутри функция не работает, если загрузка из локального файла

reader = new FileReader();
if (filePath.files && filePath.files[0]) {
    reader.onload = function(e) {
      const regex = /(?:.*\s){1,5}/gm;


      // This one works as expected
      // const str = `    Line 1
      // Line 2
      // Line 3
      // Line 4
      // Line 5
      // Line 1
      // Line 2
      // Line 3
      // Line 4
      // Line 5`;

      //Loading from external file does not work
      const str = e.target.result;
      let m;

      while ((m = regex.exec(str)) !== null) {
        // This is necessary to avoid infinite loops with zero-width matches
        if (m.index === regex.lastIndex) {
          regex.lastIndex++;
        }

        // The result can be accessed through the `m`-variable.
        m.forEach((match, groupIndex) => {
          console.log(`Found match, group ${groupIndex}: ${match}`);
        });
      }

Данные тестирования:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 1
Line 2
Line 3
Line 4
Line 5

Результат:

Found match, group 0: Line 1
Line 2
Line 3

1 Ответ

1 голос
/ 15 февраля 2020

Я бы не использовал регулярные выражения - я бы использовал .split() с \n разделителем и этот chunk() метод для их группировки.

const str = `Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10`;

Array.prototype.chunk = function(size) {
  const chunked_arr = [];
  let index = 0;
  while (index < this.length) {
    chunked_arr.push(this.slice(index, size + index));
    index += size;
  }
  return chunked_arr;
}

const matches = str.split("\n").chunk(5);
console.log(matches);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...