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

时间:2015-05-19 06:25:51

标签: javascript regex google-apps-script

我不知道为什么这不起作用 - 我已经通过我在网上发现的一个更好的正则表达式工具来验证它,并且我正在使用它什么似乎是逃避角色' \'在+符号之前使其成为文字' +',但Google Scripts一直抱怨说"无效的量词' +'"' (第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 :(得分:1)

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

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

答案 1 :(得分:1)

您可以使用以下内容:

RegExp("myemail(\\+.*?|)@gmail\\.com");
                ^    ^  ^      ^^
  • 您需要转义转义字符(特殊字符的双重转义)
  • com
  • 之前逃离点
  • 并且无需转义@
  • 也使.*非贪婪

答案 2 :(得分:0)

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

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

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