gmail应用程序脚本中的换行符getplainbody函数

时间:2017-08-23 18:23:29

标签: javascript google-apps-script

我尝试使用appscript和getplainbody()函数解析gmail主体。

我尝试解析的电子邮件正文如下:

function extractEmails() {

// get the spreadsheet
 var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var label = sheet.getRange(1,2).getValue();

// get all email threads that match label from Sheet
var threads = GmailApp.search ("label:" + label);

// get all the messages for the current batch of threads
var messages = GmailApp.getMessagesForThreads (threads);

var emailArray = [];

// get array of email addresses
messages.forEach(function(message) {
message.forEach(function(d) {

  var messagebody = d.getPlainBody()
   var name = messagebody.match(new RegExp('\*Name\:\*' + "(.*)" + ' '));


  emailArray.push(d.getFrom(),d.getTo(),name);
  });
});

到目前为止,我有以下内容:

SyntaxError: Invalid quantifier *. (line 56, file "Code")

我得到了:

 var name = messagebody.match(new RegExp('\*Name\:\*' + "(.*)" + ' '));

第56行是:

cookie()

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您正在从字符串构建正则表达式,这会导致双重逃避地狱。 JavaScript中的字符串使用反斜杠进行转义。因此,执行

str = '\*Name\:\*' + "(.*)" + ' '

产生字符串*Name:*(.*) - 注意在星号消失之前反斜杠;它们被视为用于字符串构建目的的转义字符。但是你仍然需要它们在RegExp对象的级别上逃脱,这是地狱的第二层次。

因此,要么将反斜杠转义为\\,要么(更好)使用正则表达式文字

/\*Name:\*(.*) / 

例如

messagebody.match(/\*Name:\*(.*) /)

答案 1 :(得分:1)

请注意,如果您在此处尝试此操作,则会显示。 http://regexr.com/



\*([A-Z])\w+:\*/g