Regexp帮助:为什么这个输出包含重复?

时间:2010-12-05 01:52:06

标签: javascript regex string

我有一个字符串:remove_names = "Jimmy X" <jimmy@x1.com>, "jimmy@x2.com <jimmy@x2.com>, "spitfire672@x3.com" <spitfire672@x3.com>

我正在尝试使用

提取电子邮件地址
emailsArray = remove_names.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);

这使得emailsArray [jimmy@x1.com,jimmy@x2.com,jimmy@x2.com,spitfire672@x3.com,spitfire672@x3.com]

这显然有重复。

我认为我需要将regexp参数更改为match(...),以使结果不包含重复项(即扫描< >)。我很感激任何帮助。

3 个答案:

答案 0 :(得分:1)

忽略这是not quite a valid email regular expression...

这一事实

你错过了正则表达式周围的尖括号:

/<([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)>/

答案 1 :(得分:1)

它不匹配重复项。第一个jimmy@x2.com是整体匹配,第二个jimmy@x2.com是第一个捕获组的内容。丢失括号,它应该按照你的意图工作。

答案 2 :(得分:0)

如果您知道<>之间的任何内容都是有效的电子邮件,则最容易匹配,并忽略其他文本。 /<([^>]+)>/g会在<>括号内找到所有文字。然后,您可以通过获取没有第一个和最后一个字符的子字符串来删除括号本身,或者使用$ 1捕获组。