Извлеките все адреса электронной почты из объемного текста, используя jquery

У меня есть следующий текст:

[email protected], "assdsdf" <[email protected]>, "rodnsdfald ferdfnson" <[email protected]>, "Affdmdol Gondfgale" <[email protected]>, "truform techno" <[email protected]>, "NiTsdfeSh ThIdfsKaRe" <[email protected]>, "akasdfsh kasdfstla" <[email protected]>, "Bisdsdfamal Prakaasdsh" <[email protected]>,; "milisdfsfnd ansdfasdfnsftwar" <[email protected]>

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

Ответ 1

Вот как вы можете это сделать:

HTML

<p id="emails"></p>

JavaScript

var text = '[email protected], "assdsdf" <[email protected]>, "rodnsdfald ferdfnson" <[email protected]>, "Affdmdol Gondfgale" <[email protected]>, "truform techno" <[email protected]>, "NiTsdfeSh ThIdfsKaRe" <[email protected]>, "akasdfsh kasdfstla" <[email protected]>, "Bisdsdfamal Prakaasdsh" <[email protected]>,; "milisdfsfnd ansdfasdfnsftwar" <[email protected]>';    

function extractEmails (text)
{
    return text.match(/([a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}

$("#emails").text(extractEmails(text).join('\n'));

Результат

[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]

Источник: Извлечь электронную почту из объемного текста (с регулярными выражениями, JavaScript и jQuery)

Демо 1 здесь

Демо 2 здесь, используя jQuery для каждой итераторной функции

Ответ 2

Вы можете использовать это регулярное выражение:

var re = /(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/g;

Вы можете извлечь электронные письма следующим образом:

('[email protected], "assdsdf" <[email protected]>, "rodnsdfald ferdfnson" <[email protected]>, "Affdmdol Gondfgale" <[email protected]>, "truform techno" <[email protected]>, "NiTsdfeSh ThIdfsKaRe" <[email protected]>, "akasdfsh kasdfstla" <[email protected]>, "Bisdsdfamal Prakaasdsh" <[email protected]>,; "milisdfsfnd ansdfasdfnsftwar" <[email protected]>').match(re);

//["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]

Ответ 3

Просто обновление принятого ответа. Это не работает для знаков "плюс" в адресе электронной почты. GMAIL поддерживает [email protected]

Я обновил:

return text.match(/([a-zA-Z0-9._+-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);

Ответ 4

Для этого вам не нужен jQuery; Сам JavaScript поддерживает встроенные регулярные выражения.

Посмотрите Regular Expression для получения дополнительной информации об использовании регулярного выражения с JavaScript.

Кроме этого, я думаю, что вы найдете точный ответ на свой вопрос где-то еще в Qaru - Как узнать электронные письма и имена из строки в javascript

Ответ 5

function GetEmailsFromString(input) {
  var ret = [];
  var email = /\"([^\"]+)\"\s+\<([^\>]+)\>/g

  var match;
  while (match = email.exec(input))
    ret.push({'name':match[1], 'email':match[2]})

  return ret;
}

var str = '"Name one" <[email protected]>, ..., "And so on" <[email protected]>'
var emails = GetEmailsFromString(str)

Источник