Справка по регулярному выражению: почему этот вывод содержит дубликаты? - PullRequest
0 голосов
/ 05 декабря 2010

У меня есть строка: remove_names = "Jimmy X" <jimmy@x1.com>, "jimmy@x2.com <jimmy@x2.com>, "spitfire672@x3.com" <spitfire672@x3.com>

Я пытаюсь извлечь адреса электронной почты с помощью

emailsArray = remove_names.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);

Это делает emailsArray [jimmy@x1.com,jimmy@x2.com,jimmy@x2.com,spitfire672@x3.com,spitfire672@x3.com]

Который, очевидно, имеет дубликаты.

Я думаю, что мне нужно изменить аргумент regexp на match(...), чтобы результаты не включали дубликаты (то есть сканирование на < >). Буду признателен за любую помощь.

Ответы [ 3 ]

1 голос
/ 05 декабря 2010

Не совпадают дубликаты.Первый jimmy@x2.com - это общее совпадение, а второй jimmy@x2.com - содержимое первой группы захвата.Удалите скобки, и все должно работать так, как вы хотели.

1 голос
/ 05 декабря 2010

Игнорирование того факта, что это не совсем корректное регулярное выражение электронной почты ...

Вам не хватает угловых скобок вокруг вашего регулярного выражения:

/<([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)>/
0 голосов
/ 05 декабря 2010

Если вы знаете, что что-либо между < и > является действительным электронным письмом, проще всего сопоставить его и игнорировать другой текст. /<([^>]+)>/g найдет весь текст в скобках <>. Затем вы можете удалить сами скобки, получив подстроку без первого и последнего символов, или использовать группу захвата $ 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...