使用jquery从批量文本中提取所有电子邮件地址
我有以下文字:
sdabhikagathara@rediffmail.com, "assdsdf" , "rodnsdfald ferdfnson" , "Affdmdol Gondfgale" , "truform techno" , "NiTsdfeSh ThIdfsKaRe" , "akasdfsh kasdfstla" , "Bisdsdfamal Prakaasdsh" ,; "milisdfsfnd ansdfasdfnsftwar"
这里的电子邮件是由,
或者;
。 我想提取上面的所有电子邮件并将它们存储在数组中。 有没有简单的方法使用正则表达式直接获取所有电子邮件?
以下是您如何处理此问题的方法:
HTML
JavaScript的
var text = 'sdabhikagathara@rediffmail.com, "assdsdf" , "rodnsdfald ferdfnson" , "Affdmdol Gondfgale" , "truform techno" , "NiTsdfeSh ThIdfsKaRe" , "akasdfsh kasdfstla" , "Bisdsdfamal Prakaasdsh" ,; "milisdfsfnd ansdfasdfnsftwar" '; 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'));
结果
sdabhikagathara@rediffmail.com dsfassdfhsdfarkal@gmail.com rfernsdfson@gmal.com gyfanamosl@gmail.com pidfpinfg@truformdftechnoproducts.com nthfsskare@ysahoo.in akashkatsdfsa@yahsdfsfoo.in bimsdaalprakash@live.com dfdmilifsd.ensfdfcogndfdfatia@gmail.com
来源: 从批量文本中提取电子邮件(使用正则表达式,JavaScript和jQuery)
演示1在这里
演示2这里使用jQuery的每个迭代器函数
你可以使用这个正则表达式:
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;
你可以像这样提取电子邮件:
('sdabhikagathara@rediffmail.com, "assdsdf" , "rodnsdfald ferdfnson" , "Affdmdol Gondfgale" , "truform techno" , "NiTsdfeSh ThIdfsKaRe" , "akasdfsh kasdfstla" , "Bisdsdfamal Prakaasdsh" ,; "milisdfsfnd ansdfasdfnsftwar" ').match(re); //["sdabhikagathara@rediffmail.com", "dsfassdfhsdfarkal@gmail.com", "rfernsdfson@gmail.com", "gyfanamosl@gmail.com", "pidfpinfg@truformdftechnoproducts.com", "nthfsskare@ysahoo.in", "akashkatsdfsa@yahsdfsfoo.in", "bimsdaalprakash@live.com", "dfdmilifsd.ensfdfcogndfdfatia@gmail.com"]
只是对已接受答案的更新。 这不适用于电子邮件地址中的“加号”标志。 GMAIL支持emailaddress+randomtext@gmail.com。
我更新到:
return text.match(/([a-zA-Z0-9._+-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
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" , ..., "And so on" ' var emails = GetEmailsFromString(str)
资源
你不需要jQuery; JavaScript本身支持内置的正则表达式。
有关使用带有JavaScript的正则表达式的更多信息,请查看正则表达式。
除此之外,我想你会在Stack Overflow上的其他地方找到你问题的确切答案 – 如何在javascript中查找字符串中的电子邮件和名称
根据Regexr.com ,上述function符合RFC2822标准
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)
Regexr社区来源