我不知道为什么这不起作用 - 我已经通过我在网上发现的一个更好的正则表达式工具来验证它,并且我正在使用它什么似乎是逃避角色' \'在+符号之前使其成为文字' +',但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
因此文字,但我没有运气。请帮助,谢谢。
答案 0 :(得分:1)
你需要双倍转义\
,因为它是一个字符串转义字符
new RegExp("myemail(\\+.*|)@gmail\\.com");
答案 1 :(得分:1)
您可以使用以下内容:
RegExp("myemail(\\+.*?|)@gmail\\.com");
^ ^ ^ ^^
com
@
.*
非贪婪答案 2 :(得分:0)
正如其他人所说,字符串文字正在吃反斜杠,所以regexp没有。你可以加倍反斜杠,或者你可以使用正则表达式文字而不是将字符串转换为正则表达式:
var find_email_regex = /myemail(\+.*|)@gmail\.com/;
优点:更清晰(并且甚至应该更快,因为你只创建了一个对象而不是两个)。