2010-03-02 50 views
4

我正在使用一个很酷的小部件从Gmail/homail/yahoo等导入电子邮件地址。小部件仍然是测试版,我想这就是为什么它不允许很多配置。实际上,它只是填充一个文本数据如下:如何从javascript中的字符串中找到电子邮件和名称

"Name one" <[email protected]>, "Name Two" <[email protected]>, "And so on" <[email protected]>

所以我想知道,如果有人可以帮我写个正则表达式或类似的东西来获取所有值超出OFA字符串为数组。所需的格式是:

[{name: 'Name one', email: '[email protected]'},{name: 'Name Two', email: '[email protected]'},{name: 'And so on', email: '[email protected]'}]

我是一个总的正则表达式的小白和我对如何做到这一点在JavaScript中没有任何线索。谢谢你的帮助!

+0

被警告,解析电子邮件地址,在一般情况下,*极其*复杂。如果您尝试作弊,您会发现一些合法用户的电子邮件地址在您上线后大约15分钟后会中断您的正则表达式:-) – Pointy 2010-03-02 16:34:45

+0

对不起。我错误地表达了这个问题:检查电子邮件地址是否正确并不重要。该小部件将只返回有效的电子邮件。我不明白的是获取数据对(姓名+电子邮件)。我想知道什么是内部“”=>名称和内部是什么<> =电子邮件。 string.match一次只能找到一个。对? – Marc 2010-03-02 16:53:36

+0

即使你没有检查电子邮件地址的有效性,它也会很棘手。首先,在每个地址的引用“名称”部分中可以包含逗号。如果是我,我会花费精力试图弄清楚如何让我的“酷小部件”以首先以编程友好的方式给我发送电子邮件地址。 – Pointy 2010-03-02 16:55:58

回答

10
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) 

+0

谢谢你跟踪!正是我正在寻找的! – Marc 2010-03-02 18:47:44

+0

如果您多次运行此方法,全局标志可能会导致问题。然后,您将体验到它第一次运作,第二次失败,第三次运作。 – dparnas 2014-04-02 12:53:58

+0

@dparnas,这就是为什么我要在函数内部定义正则表达式...下一次函数运行时,您将得到一个新的正则表达式实例。如果它是在函数之外定义的,那么你提到的行为将会发生。 – Tracker1 2014-04-02 18:31:09

3
function findEmailAddresses(StrObj) { 
     var separateEmailsBy = ", "; 
     var email = "<none>"; // if no match, use this 
     var emailsArray = StrObj.match(/([a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi); 
     if (emailsArray) { 
      email = ""; 
      for (var i = 0; i < emailsArray.length; i++) { 
       if (i != 0) email += separateEmailsBy; 
       email += emailsArray[i]; 
      } 
     } 
     return email; 
    } 

Source here

+1

如果我的电子邮件地址是Håkan.Söderströ[email protected]ö.se? ;-)(请参阅:http://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation/300862#300862) 另外,不要忘了' +是名称的有效字符。 Gmail用户喜欢过滤他们的电子邮件'与我+标签@ gmail.com' – 2010-03-02 16:43:36

+0

然后,它可能无法正常工作。 :) – karim79 2010-03-02 16:45:09

+0

这就是说,我认为任何正则表达式都不适合这个特定的目的,但是我认为这个答案确实证明了从任意字符串中提取电子邮件的操作理论。 – karim79 2010-03-02 16:49:41

相关问题