2015-05-19 3 views
2

Я понятия не имею, почему это не работает. Я проверил его с помощью одного из лучших инструментов регулярных выражений, которые я нашел в Интернете, чтобы проверить его, и я использую то, что кажется, является символом побега «\» перед знаком «+», чтобы сделать его буквальным «+», но «Скрипты Google» жалуются на высказывание «Недопустимый квантификатор» + «» (строка 2)Ликвидировать регулярное выражение в скрипте Google Apps

Вот мой сценарий с определенными личными детали (это очистить электронную почту, как я использую этот счет как жесткий фильтр спама) опущены:

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("[email protected]"); 
    } 
    } catch (e) {} 
} 

есть ли очевидная причина, почему он продолжает говорить недопустимый квантор? Моя цель состоит в регулярном выражении двух вариантов моего адреса, так как спамер может отправить электронное письмо с большим списком, и я хочу только разобрать его электронную почту для дальнейшей обработки.

Он должен обращаться: [email protected] [email protected]

Поэтому буквальное, но у меня нет никакой удачи с ней. Пожалуйста, помогите, спасибо.

+0

это будет 'RegExp (« myemail (\\ +. *?)? @ Gmail \\. Com »);' https://regex101.com/r/fK0aQ7/1 –

+0

@AvinashRaj: Я считаю, что отказ от ответственности в порядке: '/ (x |) /' не совсем эквивалентен '(x)?' (в отсутствие 'x', один фиксирует' '' '', один 'undefined'). И '((?: X)?)' Is pain: p – Amadan

+0

он основан на языке. –

ответ

1

Вы должны удвоиться избежать \, как это строка маскирующего

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

Вы можете использовать следующее:

RegExp("myemail(\\+.*?|)@gmail\\.com"); 
       ^^^  ^^ 
  • Вам нужно бежать экранирующий символ (двойной побег для специальных знаков)
  • уклонение от точки до com
  • и нет необходимости, чтобы избежать @
  • также сделать .* не жадный
0

Как говорят другие, строковый литерал ест ваш обратный слэш, так что регулярное выражение осталось ни с кем. Вы можете удвоить на обратной косой черты, или вы можете использовать регулярное выражение буквального вместо преобразования строки в регулярное выражение:

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

Преимущество: более разборчивыми (и должно быть даже капельку быстрее, учитывая, что вы создаете только один объект вместо двух).

+0

Кажется, я нашел группу экспертов по регулярному выражению, так как это связано несколько, есть ли способ в JS изолировать «случайные вещи» от «[email protected]», не получив + или @, включенных в возвращаемый результат ? –

Смежные вопросы