RegEx匹配网址没有影响电子邮件地址

时间:2014-04-11 11:18:04

标签: javascript regex

假设我有一个这样的文本块:

My site: http://www.mysite.com,
drop me an email at foo@bar.com

我想替换url&用于将文本转换为链接的电子邮件地址。

然后我将此模式用于电子邮件:

text.replace(/([\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*)/gi, replacement);

以及url的模式:

text.replace(/((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi, replacement);

但是url模式搞砸了我的电子邮件模式,最后的结果变成了:

<a href="mailto:foo@<a href="bar.com">bar.com</a>>bar.com</a>

这种情况有没有更好的模式?

由于

2 个答案:

答案 0 :(得分:1)

我建议你使用这个正则表达式:

/(\b(?:ht|f)tps?:\/\/.+\b)|(\b[\w.]+@(?=.*?\.)[\w.]+\b)/g

并将其替换为:

<a href="$1$2">$1$2</a>

Demo

答案 1 :(得分:0)

嗯,我认为你的核心问题是你的网址&#39;模式还包含一个&#39; @&#39;所以它匹配&#39;您的电子邮件地址。

但是,我还建议您的模式过于复杂。 类似的东西:

电子邮件模式应该是这样的:

  

[\瓦特+] + \ @ [\瓦特] +

url模式类似于:

  

的https:// [\ W] +

它不会捕获一些可以用于URL的更不寻常但有效的模式(后者例如,赢得了CGI GET的URL)。两者都没有真正验证数据。但是你真的不想要一个正则表达式。