js正则从字符串中提取邮箱地址!碰到问题!

正则从字符串中提取邮箱会把ftp地址误认为邮箱:

var string = "ftp://myname@host.dom/%2Fetc/motd...多字符串...admin123@qq.com";
var regex2 = /[\d\w]+\b@[a-zA-ZA-z0-9]+\.[a-z]+/g;
console.log(string.match(regex2))
//结果:["myname@host.dom", "admin123@qq.com"]
阅读 6.6k
3 个回答

可以使用零宽度负回顾后发断言(?<!exp),断言此位置的前面不能匹配表达式 exp

比如你的需求,后面邮箱正则该怎么写怎么写,前面加上 (?<!ftp:\/\/) 即可。

这个特性是 ES2018 后加入的。

后缀的类型限制下

建议使用
^[^\/][\d\w]+\b@[a-zA-ZA-z0-9]+\.[a-z]+/g
一般邮箱前面不会以 / 开头的,所以可以拦截一下邮箱的开头信息

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题