当前位置: 首页 > 知识库问答 >
问题:

用Google Apps脚本解析电子邮件,正则表达式问题?

西门磊
2023-03-14

我曾经非常精通VBA和excel,但我现在正在尝试用Google脚本做一些事情,我很好地和真正的卡住了。

基本上,我试着从Gmail的标准化电子邮件中提取数据到Google Sheet中。到目前为止,我已经参考了几个关于这个主题的其他线程,我可以将电子邮件的正文放入工作表中,但无法解析它。

我对Google Script也是全新的,甚至调试器现在似乎也停止工作了(以前也是,所以如果有人能提出这是为什么,我会很感激)。

下面是我的基本功能:

function processInboxToSheet() {
  var label = GmailApp.getUserLabelByName("NEWNOPS");
  var threads = label.getThreads();
  // Set destination sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get all emails labelled NEWNOPS 
  for (var i = 0; i < threads.length; i++) {
    var tmp,
      message = threads[i].getMessages()[1],  // second message in thread
      content = message.getPlainBody();  // remove html markup
    if (content) {

      // search email for 'of:' and capure next line of text as address
      // tests OK at regex101.com
      property = content.match(/of:[\n]([^\r\n]*)[\r\n]/); 

      // if no match, display error
      var property = (tmp && tmp[1]) ? tmp[1].trim() : 'No property';
      sheet.appendRow([property]);
    } // End if
  // remove label to avoid duplication 
  threads[i].removeLabel(label)
  } // End for loop
}

我可以附加'content'到工作表Ok,但不能提取regex所需的地址文本。内容显示如下:

共有1个答案

常嘉平
2023-03-14

.match()的返回值是一个数组。包含地址的第一个捕获组将位于索引1处。

根据调用.match()后的以下行,应该为tmp变量赋值该数组,而不是为property变量赋值。

var property = (tmp && tmp[1]) ? tmp[1].trim() : 'No property';

这一行说,如果.match()返回的东西不是空的,并且在索引1处有一个值,那么修剪该值并将其赋给property,否则将其赋给字符串'no property'。

property = content.match(/of:[\n]([^\r\n]*)[\r\n]/);  

对此:

tmp = content.match(/of:[\n]([^\r\n]*)[\r\n]/);
 类似资料:
  • 问题内容: 首先,我知道不建议使用正则表达式发送电子邮件,但我必须对此进行测试。 我有这个正则表达式: 在Java中,我这样做: 但是,无论电子邮件是否格式正确,正则表达式都会失败。Eclipse内部的“查找并替换”功能可以在同一个正则表达式下正常运行。 任何想法? 问题答案: FWIW,这是我们用来验证电子邮件地址的Java代码。正则表达式非常相似: 工作相当可靠。

  • 问题内容: 我正在尝试编写一个正则表达式来屏蔽电子邮件地址。下面的例子。 输入:john.doe@example.en.com 输出:j*******@e*********.com 我已经尝试了以下方法,但似乎无法正常工作。 正则表达式: 输出:j * @ example.en.com 正则表达式: 输出:j ******。com 任何帮助,将不胜感激。 演示 问题答案: ⇒(当前问题)- (请参

  • 问题内容: 我想要一个正则表达式,它将从String中提取电子邮件地址(使用Java正则表达式)。 那确实有效。 问题答案: 这是真正有效的正则表达式。我花了一个小时在网上冲浪并测试了不同的方法,尽管Google在这些页面上排名最高,但大多数方法都无效。 我想与您分享一个有效的正则表达式: 这是原始链接:http : //www.mkyong.com/regular-expressions/how

  • 问题内容: 有人可以向我解释这个Java Regex吗? 此正则表达式用于验证 电子邮件地址 。 问题答案: 如今,验证电子邮件地址被认为是一种不好的做法(停止使用regex验证电子邮件地址),尤其是使用问题中的表达式时。例如,这是一个更完整的表达式。 至于此表达式,我们将其分为几部分: 匹配字符串的开头 匹配列表中的至少一个字符 非捕获(请参阅backreference)组,可以重复0..n次,

  • 问题内容: 我正在使用以下正则表达式 它接受#@#.com作为有效电子邮件。我应该使用什么模式? 问题答案: 您应该使用apache- commons电子邮件验证程序。您可以从此处获取jar文件。 这是一个简单的用法示例:

  • 我使用以下正则表达式来验证单个电子邮件地址。如何使此正则表达式接受以逗号分隔的电子邮件地址列表? 我使用razor视图将正则表达式放置在输入标记中: