将 URL 和电子邮件包装在 anchor 中的 JavaScript 正则表达式

标签 javascript regex

我到处搜索,但无法找到明确的答案。与正则表达式的情况一样。所以我想我应该在这里问。

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

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

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

不过我知道你们中的一个人已经在指尖找到了答案:)

最佳答案

好吧,盲目地使用来自 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>");

可能会起作用

关于将 URL 和电子邮件包装在 anchor 中的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/579335/

相关文章:

php - 追加到字符串中找到的字符

javascript - 如何组织不修改状态的操作?

javascript - 将自定义 CSS 添加到使用 webview 呈现的 HTML 页面

javascript - Firebase 的云功能 : how to use a Transaction promise?

javascript - IE8 中选择和范围功能的更改

javascript - 将 keydown 传递给另一个元素

PHP 匹配控制字符但不匹配空格?

regex - 为什么这个 grep 命令没有返回任何东西? ( bash )

javascript - 尝试使用js代码清理错误的CSS规则

Python正则表达式匹配子reddit名称