JavaScript Regexp在锚点中包装URL和电子邮件

时间:2009-02-23 21:00:44

标签: javascript regex

我搜索了高低,但无法找到确定的答案。正如regexp的情况一样。所以我想我会在这里问。

我正在尝试将一个正则表达式组合在一起,我可以在JavaScript中使用指向它们的锚标记替换所有URL和电子邮件地址的实例(不需要非常严格)。

显然,这通常是在服务器端非常简单地完成的,但在这种情况下,必须使用纯文本,因此在运行时执行替换的优雅JavaScript解决方案将是完美的。

Onl问题是,正如我之前所说,我的技能组合中有一个巨大的正则表达形状的大洞:(

我知道你们中的一个人在你的指尖有答案:)

5 个答案:

答案 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”)将是困难且容易出错的。以下内容仅适用于合理格式良好的输入,但这就是我要做的事情:

  1. 找到您要处理的元素,将其设为innerHTML属性值
  2. 迭代地找到已经 链接的所有内容(/(<a\b.+?</a>/ig
  3. 基于此,将你的字符串剪成“这不是一个链接” - 和“这是一个链接”-bits,将它们全部附加到一个整齐的数组
  4. 仅处理“非链接”位(不以"<a "开头),查找URL或电子邮件地址模式
  5. 打包您在<a>标记
  6. 中找到的每个地址
  7. join()数组返回字符串
  8. innerHTML属性设置为新值
  9. 我相信您会找到与电子邮件地址和网址匹配的正则表达式示例。选择最适合你的,并在步骤4中使用它们。)。

答案 4 :(得分:0)

只需添加一些关于电子邮件正则表达式的信息:他们中的大多数人似乎忽略了域名中可能包含“åäö”字符。因此,如果您关心这一点,请确保您使用的解决方案在正则表达式的域部分中具有åäöÅÄÖ。