regex.exe c не может извлечь таблицу из тела письма - PullRequest
1 голос
/ 18 апреля 2020

У меня есть тело письма, где есть таблица, в которой заголовок первого левого столбца имеет «Время клиента». enter image description here

Я хочу извлечь всю эту таблицу, но получаю Null со следующим exe c.

let regex = /<tr><td><b>Client Time([\S\s]+)<table/;
    Logger.log(regex.exec(tempbody));

Вот дополнительный код, но он должен все будет в порядке.

if ((table = regex.exec(tempbody)) !== null) {
      row_regex = new RegExp(/<tr>(.+)<\/tr>/g);
      let data, tempdata, rows, cell;
      Logger.log(data);
      while ((rows = row_regex.exec(table[1])) !== null) {
        data = []
        cell_regex = new RegExp(/<td.*?>(.+?)<\/td>/g);
        while ((cell = cell_regex.exec(rows[1])) !== null) { 
          data.push(cell[1]);
        }
        if (!tempdata || (tempdata && tempdata.length === data.length)) { 
          sheet.appendRow(data);
        }
        tempdata = data;
      }
      inProcessLabel.removeFromThread(threads[i]);
    }

Какие изменения мне нужно сделать в регулярных выражениях, извините, я не очень разбираюсь в регулярных выражениях, но считаю, что этот код работал у меня в прошлом.

1 Ответ

2 голосов
/ 19 апреля 2020

Использование регулярных выражений для разбора HTML не очень хорошая идея ( по ряду причин ).

Теперь у нас есть V8, так что вы можете просто добавить правильную библиотеку HTML / XML синтаксического анализатора (написанную на чистом Javascript с минимальными зависимостями) в ваш проект Apps Script. Просто получите исходный код библиотеки в полной или сокращенной форме и добавьте его в качестве собственного файла сценария.

Вот несколько хороших вариантов:

...