Javascript Google脚本在第二次调用Gmail后返回null
我正在尝试创建一个脚本,在用户的gmail中搜索soundcloud.com当前和更新时间不超过1天的电子邮件。然后,我尝试使用appendRow将这些soundcloud URL拉入电子表格。我使用正则表达式在“soundcloud.com”之后插入url和任何内容,直到出现空白。我还使用一个函数来解析html 很抱歉,运行脚本几秒钟后发生了服务器错误。代码如下:Javascript Google脚本在第二次调用Gmail后返回null,javascript,regex,google-apps-script,Javascript,Regex,Google Apps Script,我正在尝试创建一个脚本,在用户的gmail中搜索soundcloud.com当前和更新时间不超过1天的电子邮件。然后,我尝试使用appendRow将这些soundcloud URL拉入电子表格。我使用正则表达式在“soundcloud.com”之后插入url和任何内容,直到出现空白。我还使用一个函数来解析html 很抱歉,运行脚本几秒钟后发生了服务器错误。代码如下: function getTextFromHtml(body) { return getTextFromNode(Xml.par
function getTextFromHtml(body) {
return getTextFromNode(Xml.parse(body, true).getElement());
}
function getTextFromNode(x) {
switch(x.toString()) {
case 'XmlText': return x.toXmlString();
case 'XmlElement': return x.getNodes().map(getTextFromNode).join('');
default: return '';
}
}
function searchy() {
var search = GmailApp.search('"soundcloud.com" newer_than:1d');
for (var i=0; i < search.length; i++) {
var msgs = search[i].getMessages();
for (var j=0; j < msgs.length; j++) {
var body = msgs[j].getPlainBody();
var printthis = getTextFromHtml(body);
var regex = /https?:\/\/soundcloud\.com\/\S*/gi;
var scURL = regex.exec(printthis);
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(scURL);
}
}
}
有人能帮忙吗???还有,有没有更好的方法?我是个新手
谢谢!
尼尔
编辑
我想出来了。必须在正则表达式函数中删除g。请看亨里克的回答:非常感谢文森特的帮助 似乎regex.exec返回null,因为没有匹配项 修复函数以防止错误的一种方法:
function searchy() {
var search = GmailApp.search('"soundcloud.com" newer_than:1d');
for (var i=0; i < search.length; i++) {
var msgs = search[i].getMessages();
for (var j=0; j < msgs.length; j++) {
var body = msgs[j].getPlainBody();
var printthis = getTextFromHtml(body);
var regex = /https?:\/\/soundcloud\.com\/\S*/gi;
var scURL = regex.exec(printthis);
if (scURL !== null) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(scURL);
}
}
}
}
来源:谢谢您的帮助,但现在它只是忽略了一些soundcloud URL。这是因为正则表达式的格式不正确吗?这里有两个与之匹配的soundcloud示例:,这里有一个与之不匹配的示例:正则表达式看起来不错,如果您愿意,可以在上面进行测试。我正在为这两个字符串进行匹配。您是否确定输入,以及getTextFromNode函数是否按预期工作?我不知道你是否可以交互调试,但您至少应该能够添加一些额外的日志输出,以验证输入字符串是否符合预期。我使用了此线程中的函数:正如我所说的,我对javascript和一般编码非常陌生,所以我尝试使用这些函数并更改变量以匹配我自己的。因为我发现了这一点,我现在需要将“更新的”功能改为几分钟,而不是几天、几周、几个月或几年。有什么建议吗?我试着做了10m以上,007d以上等等,但都没用。我应该把它做成新的线吗?
function searchy() {
var search = GmailApp.search('"soundcloud.com" newer_than:1d');
for (var i=0; i < search.length; i++) {
var msgs = search[i].getMessages();
for (var j=0; j < msgs.length; j++) {
var body = msgs[j].getPlainBody();
var printthis = getTextFromHtml(body);
var regex = /https?:\/\/soundcloud\.com\/\S*/gi;
var scURL = regex.exec(printthis);
if (scURL !== null) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(scURL);
}
}
}
}