我尝试使用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()
我做错了什么?
答案 0 :(得分:2)
您正在从字符串构建正则表达式,这会导致双重逃避地狱。 JavaScript中的字符串使用反斜杠进行转义。因此,执行
str = '\*Name\:\*' + "(.*)" + ' '
产生字符串*Name:*(.*)
- 注意在星号消失之前反斜杠;它们被视为用于字符串构建目的的转义字符。但是你仍然需要它们在RegExp对象的级别上逃脱,这是地狱的第二层次。
因此,要么将反斜杠转义为\\
,要么(更好)使用正则表达式文字:
/\*Name:\*(.*) /
例如
messagebody.match(/\*Name:\*(.*) /)
答案 1 :(得分:1)