I am using a cool widget to import email addresses out of gmail/homail/yahoo etc. The widget is still beta and I guess thats why it does not allow a lot of configuration. It actually just fills a textarea with the following data:
"Name one" <[email protected]>, "Name Two" <[email protected]>, "And so on" <[email protected]>
So I wondered if someone could help me write a regex or something like that to get all values out ofa string into an array. The desired format would be:
[{name: 'Name one', email: 'foo@domain'},{name: 'Name Two', email: 'foo@domain'},{name: 'And so on', email: '[email protected]'}]
I am a total regex noob and I have no clue on how to do that in javascript. Thanks for your help!
I am using a cool widget to import email addresses out of gmail/homail/yahoo etc. The widget is still beta and I guess thats why it does not allow a lot of configuration. It actually just fills a textarea with the following data:
"Name one" <[email protected]>, "Name Two" <[email protected]>, "And so on" <[email protected]>
So I wondered if someone could help me write a regex or something like that to get all values out ofa string into an array. The desired format would be:
[{name: 'Name one', email: 'foo@domain'},{name: 'Name Two', email: 'foo@domain'},{name: 'And so on', email: '[email protected]'}]
I am a total regex noob and I have no clue on how to do that in javascript. Thanks for your help!
Share Improve this question asked Mar 2, 2010 at 16:30 MarcMarc 3777 silver badges19 bronze badges 3- Be warned that parsing email addresses is, in general, extremely plicated. If you try to cheat, you'll find some legitimate user with an email address that breaks your regex in about 15 minutes after you go live :-) – Pointy Commented Mar 2, 2010 at 16:34
- I am sorry. I missformulated the question a little bit: It is not important to check wheter an email address is correct or not. The widget will only return valid emails. What I don't understand is to get the pairs of data (name + email). I would like to find out what is inside "" => name and what is inside <> = email. string.match does only find one at a time. right? – Marc Commented Mar 2, 2010 at 16:53
- Even if you're not checking the validity of the email addresses it's going to be tricky. There can be mas inside the quoted "name" parts of each address, for one thing. If it were me, I'd be spending my energy trying to figure out how to get my "cool widget" to give me the email addresses in a programming-friendly way in the first place. – Pointy Commented Mar 2, 2010 at 16:55
3 Answers
Reset to default 11function 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)
function findEmailAddresses(StrObj) {
var separateEmailsBy = ", ";
var email = "<none>"; // if no match, use this
var emailsArray = StrObj.match(/([a-zA-Z0-9._-]+@[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
In order to acheive that you'll have to read some documentation. Regex are not very plicated, but they get some gettin used to.
Here's a nice place to start Javascript Regular Expression
And try practicing writting regex using rubular