Как мне переопределить имя и адрес электронной почты из 3 основных почтовых клиентов в ruby? - PullRequest
1 голос
/ 12 февраля 2012

Я думал, что понял это, но похоже, что в моем регулярном выражении все еще есть причуды. По сути, я хотел бы использовать один и тот же шаблон регулярных выражений для соответствия следующим основным почтовым клиентам (Gmail, Yahoo и обычная электронная почта):

"Brian Mang" <brian.mang@email.com>   -- Case1
Brian Mang (brian.mang@email.com)     -- Case2
<brian.mang@email.com>                -- Case3
brian.mang@email.com                  -- Case4

У меня был следующий шаблон регулярных выражений:

/[\W"]*(?<name>.*?)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match(contact)

и это работает для всех дел 1-3, но я не могу заставить его поднять дело 4, я пытался возиться с ним, но не могу понять, потому что это ломает другие дела. Любая идея, что мне нужно изменить / изменить, чтобы мое регулярное выражение подобрало все 4 случая? Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Попробуйте это

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@\S+)[>)]?

См. здесь на Regexr

Я сделал необязательные классы, окружающие адрес, и изменил часть, совпадающую с адресом электронной почты, на \S+@\S+, что означает, по крайней мере, один непробельный символ, за которым следует @, а затем, по крайней мере, еще один непробельный символ.

Поскольку вышеприведенная версия также соответствует закрывающему символу, вы можете ограничить часть после @ немного больше

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^\s>)]+)[>)]?

см. здесь, на Regexr

0 голосов
/ 12 февраля 2012

Редактировать: Этот работает для всех четырех:

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^)>]+)[>)]?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...