首页 文章

在Google Apps脚本中转义正则表达式字面值

提问于
浏览
2

我不知道为什么这不起作用 - 我已经通过我在网上发现的一个更好的正则表达式工具来验证它,我之前使用的似乎是转义字符''之前这个标志使它成为一个文字'',但谷歌脚本一直在抱怨说“无效的量词”'(第2行)

这是我的脚本,其中包含某些个人详细信息(清除电子邮件,因为我将此帐户用作硬垃圾邮件过滤器)

function getEmailData() {
  var find_email_regex = new RegExp("myemail(\+.*|)\@gmail.com");
  var emails = GmailApp.getChatThreads();
  var process_email = "";
  try {
    for (i = 0; i < emails.length; i++) {
      for (x = 0; x < emails[i].getTo().length; x++) {
        if (emails[i].getTo()[x].matches(find_email_regex)) {
          email_triage(emails[i]);
          break;
        }
      }
    }
  } catch (e) {}
}

function email_triage(email) {
  var reject_regex = new RegExp("^[^\+]*$");
  try {
    if (email.matches(reject_regex)) {
      email.moveThreadToTrash();
    }
    else {
      email.getMessages()[0].forward("mymainemail@email.ca");
    }
  } catch (e) {}
}

有没有明显的理由说为什么它一直说无效量词?我的目标是对地址的两个变体进行正则表达式,因为垃圾邮件发送者可能会发送一个包含大量列表的电子邮件,而我只想解析其中的电子邮件以进行进一步处理 .

它需要处理:myemail stuff@gmail.com myemail@gmail.com

因此,文字,但我没有运气 . 请帮助,谢谢 .

3 回答

  • 0

    您可以使用以下内容:

    RegExp("myemail(\\+.*?|)@gmail\\.com");
                    ^    ^  ^      ^^
    
    • 你需要转义转义字符(特殊字符的双转义)

    • com 之前逃离点

    • 并且无需逃避 @

    • 也使 .* 非贪心

  • 1

    你需要双重转义 \ ,因为它是一个字符串转义字符

    new RegExp("myemail(\\+.*|)@gmail\\.com");
    
  • 1

    正如其他人所说,字符串文字正在吃你的反斜杠,所以regexp没有 . 你可以加倍反斜杠,或者你可以使用正则表达式文字而不是将字符串转换为正则表达式:

    var find_email_regex = /myemail(\+.*|)@gmail\.com/;
    

    优点:更清晰(并且甚至应该更快,因为您只创建一个对象而不是两个对象) .

相关问题