【问题标题】:regex.exec not able to extract table from email bodyregex.exec 无法从电子邮件正文中提取表格
【发布时间】:2020-08-01 08:38:41
【问题描述】:

我有一个电子邮件正文,其中有一个表格,其中“客户时间”作为第一个左列的标题。

我想提取整张表,但使用以下 exec 得到 Null。

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]);
    }

我需要在正则表达式中做哪些更改,抱歉我不太了解正则表达式,但相信同样的代码过去对我有用。

【问题讨论】:

标签: regex google-apps-script gmail-api


【解决方案1】:

使用正则表达式解析 HTML 不是一个好主意 (for a number of reasons)。

我们现在拥有 V8,因此您可以简单地将适当的 HTML/XML 解析器库(以纯 Javascript 编写,依赖最少)添加到您的 Apps 脚本项目中。只需以完整或缩小的形式获取库源并将其添加为自己的脚本文件。

这里有一些不错的选择:

【讨论】:

  • 我了解,但我过去曾使用过此脚本(在另一个仍然有效的 gmail 帐户上),并且电子邮件 html 正文非常一致。所以现在我需要在这里完成这项工作。
  • 你好@Abdul,就像TheAddonDepot在他们的参考文献中提到的那样:“整个HTML解析是不可能用正则表达式进行的,因为它依赖于匹配正则表达式不可能的开始和结束标记”。那么你所说的“我已经让这个脚本在过去工作”到底是什么意思?干杯!
  • 您能补充一下这个问题的答案吗? stackoverflow.com/questions/49204546
  • @TheAddonDepot 我正在寻找一个规范的问题和答案,因此可以参考其他人。我没有太多使用模块。这个问题的答案似乎已经过时了。因此,如果您添加最新的规范(通用)答案(您似乎在这里有更好的经验),那将对社区有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2021-07-26
  • 2011-05-15
  • 1970-01-01
  • 2011-08-24
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多