Совпадение с адресом электронной почты, который стоит перед определенным словом

У меня есть регулярное выражение для сопоставления адресов электронной почты в javascript. Давайте посмотрим пример:

var email  = "[email protected] (A,B); [email protected] (C,D); [email protected] (E,F);";
var emails = email.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);

Это вернет мне все электронные письма в электронной почте var.

Теперь у меня есть строка:

var initials = "(A,B)";

И я хотел бы получить только электронное письмо перед значением инициалов;

Если инициалы var равны "(A,B)", то я хотел бы получить только адрес электронной почты [email protected].

Большое спасибо за вашу помощь!


person Milos Cuculovic    schedule 04.07.2012    source источник
comment
вы можете разделить строку email на ; и отфильтровать каждый элемент с помощью findString(initials)   -  person gaussblurinc    schedule 04.07.2012
comment
@loldop, спасибо, но я не думаю, что это хорошая идея в моем случае.   -  person Miloš    schedule 04.07.2012
comment
ваш пример не представляет, почему вы хотите использовать регулярное выражение. у вас есть разделитель между каждым (почта и инициалы)? вы, возможно, захотите сделать хэш-массив из своей строки   -  person gaussblurinc    schedule 04.07.2012
comment
@лолдоп. На самом деле, я хотел бы найти адрес электронной почты, который соответствует данным инициалам. Как я уже сказал, если у меня есть (A, B), я хотел бы получить адрес электронной почты [email protected]   -  person Miloš    schedule 04.07.2012


Ответы (2)


JavaScript:

var input = "[email protected] (A,B); [email protected] (C,D); [email protected] (E,F);";
var initials = "(A,B)";
var email = input.match(new RegExp("([a-zA-Z0-9]+(?:[-._][a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*)(?=\\s*" + initials.replace(/([()])/g, "\\$1") + ")"))[0];
print(email);

Вывод:

[email protected]

Протестируйте этот код здесь.

person Ωmega    schedule 04.07.2012
comment
Спасибо Спасибо спасибо ! ! ! ! ! Отлично, я пытаюсь реализовать это с 3 дней. Отличный ответ. - person Miloš; 04.07.2012

Независимо от того, есть ли у вас что-то вроде этого «[email protected](A,B)» или такого «(A,B)[email protected]», все, что вам нужно сделать, это получить первую и последнюю часть единственного захвата буквы. Таким образом, (A, B) следует автоматически исключить для захвата регулярного выражения.

Если это не проблема, вы всегда можете взять текст, возвращаемый регулярным выражением, и использовать замену, чтобы изменить (A, B) на ничего, как это:

var regexresult=str.replace("(A,B)","");

Этот код удалит строку, если она присутствует, иначе он ничего не сделает.

person Raul Martins    schedule 04.07.2012
comment
Спасибо, Рауль, но в моем случае проблема в другом. На самом деле, я знаю инициалы, и с ними я хотел бы получить электронное письмо непосредственно перед этим. Инициалы всегда в конце адреса электронной почты с пробелом перед ним. - person Miloš; 04.07.2012