Javascript Google脚本在第二次调用Gmail后返回null

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

我正在尝试创建一个脚本,在用户的gmail中搜索soundcloud.com当前和更新时间不超过1天的电子邮件。然后,我尝试使用appendRow将这些soundcloud URL拉入电子表格。我使用正则表达式在“soundcloud.com”之后插入url和任何内容,直到出现空白。我还使用一个函数来解析html

很抱歉,运行脚本几秒钟后发生了服务器错误。代码如下:

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);
          }
      }
    }
  }