我搜索了高低,但无法找到确定的答案。正如regexp的情况一样。所以我想我会在这里问。
我正在尝试将一个正则表达式组合在一起,我可以在JavaScript中使用指向它们的锚标记替换所有URL和电子邮件地址的实例(不需要非常严格)。
显然,这通常是在服务器端非常简单地完成的,但在这种情况下,必须使用纯文本,因此在运行时执行替换的优雅JavaScript解决方案将是完美的。
Onl问题是,正如我之前所说,我的技能组合中有一个巨大的正则表达形状的大洞:(
我知道你们中的一个人在你的指尖有答案:)
答案 0 :(得分:5)
好吧,盲目地使用http://www.osix.net/modules/article/?id=586
的正则表达式var emailRegex =
new RegExp(
'([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}' +
'\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.' +
')+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)',
"gi");
var urlRegex =
new RegExp(
'((https?://)' +
'?(([0-9a-z_!~*\'().&=+$%-]+: )?[0-9a-z_!~*\'().&=+$%-]+@)?' + //user@
'(([0-9]{1,3}\.){3}[0-9]{1,3}' + // IP- 199.194.52.184
'|' + // allows either IP or domain
'([0-9a-z_!~*\'()-]+\.)*' + // tertiary domain(s)- www.
'([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.' + // second level domain
'[a-z]{2,6})' + // first level domain- .com or .museum
'(:[0-9]{1,4})?' + // port number- :80
'((/?)|' + // a slash isn't required if there is no file name
'(/[0-9a-z_!~*\'().;?:@&=+$,%#-]+)+/?))',
"gi");
然后
text.replace(emailRegex, "<a href='mailto::$1'>$1</a>");
和
text.replace(urlRegex, "<a href='$1'>$1</a>");
可能会起作用
答案 1 :(得分:1)
不是固定解决方案,但this会指向正确的方向。
我使用Regex Coach来构建和测试我的正则表达式。您可以在线找到大量有关网址和电子邮件地址的正则表达式示例。
答案 2 :(得分:1)
这是一篇关于网址的好文章......
https://blog.codinghorror.com/the-problem-with-urls/
电子邮件更直接,因为它们必须以.tld结尾 你不需要对那个有所了解,因为你没有验证,只是匹配,所以我不知道......
[^ \ S] + @ \ W [\ W - ]。* [A-ZA-Z] +
答案 3 :(得分:0)
与往常一样,这(“这个”是“使用正则表达式处理HTML”)将是困难且容易出错的。以下内容仅适用于合理格式良好的输入,但这就是我要做的事情:
innerHTML
属性值/(<a\b.+?</a>/ig
)"<a "
开头),查找URL或电子邮件地址模式<a>
标记join()
数组返回字符串innerHTML
属性设置为新值我相信您会找到与电子邮件地址和网址匹配的正则表达式示例。选择最适合你的,并在步骤4中使用它们。)。
答案 4 :(得分:0)
只需添加一些关于电子邮件正则表达式的信息:他们中的大多数人似乎忽略了域名中可能包含“åäö”字符。因此,如果您关心这一点,请确保您使用的解决方案在正则表达式的域部分中具有åäöÅÄÖ。