web-dev-qa-db-fra.com

Extraire toutes les adresses e-mail du texte en masse à l'aide de jquery

J'ai le texte ci-dessous:

[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]>

Ici, les e-mails sont séparés par , ou ;. Je souhaite extraire tous les e-mails présents ci-dessus et les stocker dans un tableau. Existe-t-il un moyen simple d'utiliser regex pour obtenir directement tous les e-mails?

33
Milind Anantwar

Voici comment vous pouvez aborder cela:

[~ # ~] 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._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}

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

Résultat

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

Source: Extraire le courrier électronique du texte en masse (avec les expressions régulières, JavaScript et jQuery)

Démo 1 ici

Démo 2 ici en utilisant chaque fonction d'itérateur de jQuery

87
Leniel Maccaferri

Vous pouvez utiliser cette expression régulière:

var re = /(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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;

Vous pouvez extraire les e-mails comme ceci:

('[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]"]
12
Minko Gechev

Juste une mise à jour de la réponse acceptée. Cela ne fonctionne pas pour les signes "plus" dans l'adresse e-mail. GMAIL prend en charge [email protected].

Je me suis mis à jour pour:

return text.match(/([a-zA-Z0-9._+-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
8
Nick Caruso

Vous n'avez pas besoin de jQuery pour cela; JavaScript lui-même prend en charge les expressions régulières intégrées.

Jetez un œil à Regular Expression pour plus d'informations sur l'utilisation des expressions rationnelles avec JavaScript.

En dehors de cela, je pense que vous trouverez la réponse exacte à votre question ailleurs sur Stack Overflow - Comment trouver les e-mails et les noms d'une chaîne en javascript

2
Roy Dictus
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)

Source

2
Johan

La fonction ci-dessous est RFC2822 conforme selon Regexr.com

ES5:

var extract = function(value) {
   var reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g;
   return value && value.match(reg);
}

ES6:

const reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g
const extract = value => value && value.match(reg)

source communautaire Regexr

2
Sebastien H.