我有一个字符串: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(...)
,这样结果中就不会包含重复项(即扫描< >
)。如果能帮上忙我会很感激的。
发布于 2010-12-05 13:08:02
如果您知道<
和>
之间的任何内容都是有效的电子邮件,那么最简单的方法就是将其匹配并忽略其他文本。/<([^>]+)>/g
将查找<>
括号中的所有文本。然后,您可以通过获取不包含第一个和最后一个字符的子字符串来删除括号本身,或者使用$1捕获组。
发布于 2010-12-05 09:54:27
忽略这是not quite a valid email regular expression...的事实
您的正则表达式缺少尖括号:
/<([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)>/
发布于 2010-12-05 13:37:50
它不匹配重复项。第一个jimmy@x2.com
是总体匹配,第二个jimmy@x2.com
是第一个捕获组的内容。去掉括号,它应该可以像您预期的那样工作。
https://stackoverflow.com/questions/4356951
复制相似问题