假设我有一个这样的文本块:
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>
这种情况有没有更好的模式?
由于
答案 0 :(得分:1)
我建议你使用这个正则表达式:
/(\b(?:ht|f)tps?:\/\/.+\b)|(\b[\w.]+@(?=.*?\.)[\w.]+\b)/g
并将其替换为:
<a href="$1$2">$1$2</a>
答案 1 :(得分:0)
嗯,我认为你的核心问题是你的网址&#39;模式还包含一个&#39; @&#39;所以它匹配&#39;您的电子邮件地址。
但是,我还建议您的模式过于复杂。 类似的东西:
电子邮件模式应该是这样的:
[\瓦特+] + \ @ [\瓦特] +
url模式类似于:
的https:// [\ W] +
它不会捕获一些可以用于URL的更不寻常但有效的模式(后者例如,赢得了CGI GET的URL)。两者都没有真正验证数据。但是你真的不想要一个正则表达式。