【发布时间】:2019-03-26 20:25:54
【问题描述】:
我编写了一个 Google Apps 脚本来从我的电子邮件中提取一些数据并将其插入到电子表格中。该脚本实际上运行良好并且可以正常插入数据,但我的日志中不断出现以下错误:
TypeError: Cannot read property "1" from null. (line 46, file "Code")
According to MDN,exec 方法返回一个数组,其中“匹配的文本作为第一项,然后是每个匹配的包含捕获的文本的捕获括号的一项。”因为我想要正则表达式括号内的值,而不是整个匹配的文本,所以我使用[1]。
这是有问题的函数:
function getEmails() {
var label = GmailApp.getUserLabelByName("CapitalOne Transaction");
var threads = label.getThreads(); // Get threads of label above
for (var i in threads) {
var messages = threads[i].getMessages();
for (var j in messages) {
if ( messages[j].isUnread() ) {
var emailBody = messages[j].getPlainBody();
Logger.log("Email body: " + emailBody);
// Get account number
const regExpAcct = /Account ending in (\d{4})/g;
var message_account = regExpAcct.exec(emailBody);
if(message_account){ Logger.log("Email message accnt: " + message_account[1]); }
// Get date of transaction
var regExpDate = /we're notifying you that on (...+), at/g;
var message_date = regExpDate.exec(emailBody);
if(message_date){ Logger.log("Email message date: " + message_date[1]); }
// Get vendor name
var regExpVendor = /, at (...+),/g;
var message_vendor = regExpVendor.exec(emailBody);
if(message_vendor){ Logger.log("Email message vendor: " + message_vendor[1]); }
// Get transaction amount
const regExpAmount = /purchase in the amount of \$(\S+) was/g;
var message_amount = regExpAmount.exec(emailBody);
if(message_amount){ Logger.log("Email message amount: " + message_amount[1]); }
addDataToSpreadsheet( message_date[1], message_account[1], message_vendor[1], message_amount[1] );
messages[j].markRead();
}
}
}
}
有问题的第(46)行是这一行:addDataToSpreadsheet( message_date[1], message_account[1], message_vendor[1], message_amount[1] );
调用这个函数:
function addDataToSpreadsheet( date, account, vendor, amount ) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow( [date, account, vendor, amount] );
}
我的Logger.logs 在每个正则表达式之后所有变量都输出正常,就像我说的,数据正在使用上面的函数完美地输入到电子表格中,但是每次getEmails() 函数运行时我仍然得到错误.
有什么想法吗?
【问题讨论】:
标签: javascript arrays regex google-apps-script null