提取并添加指向字符串中 URL 的链接 [重复]

Posted

技术标签:

【中文标题】提取并添加指向字符串中 URL 的链接 [重复]【英文标题】:Extract and add link to URLs in string [duplicate] 【发布时间】:2011-06-01 14:47:51 【问题描述】:

可能重复:How to replace plain URLs with links?

我有几个包含链接的字符串。例如:

var str = "I really love this site: http://www.***.com"

我需要添加一个链接标签,所以 str 将是:

I really love this site: <a href="http://www.***.com">http://www.***.com</a>

我想会涉及到一些正则表达式,但我无法使用 match() 让它为我工作。任何其他想法

【问题讨论】:

简单的正则表达式是解决这个问题的一种天真的方法,并且会在很多边缘案例的测试中失败。在检测 URL 时,总是最好依赖专门的库。 Here's why. 我创建了这个库,它可以帮助任何在此页面中寻找解决方案的人:ali-saleem.github.io/anchorme.js 【参考方案1】:

这很简单:

str.replace( /(http:\/\/[^\s]+)/gi , '<a href="$1">$1</a>' )

输出:

I really love this site: <a href="http://www.***.com">http://www.***.com</a>

【讨论】:

上面的代码会在很多边缘案例的测试中失败。在检测 URL 时,总是最好依赖专门的库。 Here's why. @DanDascalescu 我同意 @SeanPatrickFloyd:谢谢! BTW/OT:有机会考虑this reopen request 和this one 吗?谢谢!【参考方案2】:
function replaceURL(val) 
  var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
  return val.replace(exp,"<a href='$1'>$1</a>"); 

【讨论】:

+1 用于复杂的正则表达式。不知道 js 有 \b 标记,否则我会使用它 上面的代码会在很多边缘案例的测试中失败。在检测 URL 时,总是最好依赖专门的库。 Here's why.【参考方案3】:

我能想到一个快速而肮脏的基于正则表达式的解决方案。有点像

RegExp exp = new RegExp('(.*)(http://[^ ])(.*)', 'g'); // matches URLs
string = string.replace(exp, $1 + '<a href=\"' + $2 + '\">' + $2 '</a>' + $3);

我还没有测试它,所以需要一些改进。

【讨论】:

这样的正则表达式会在很多边缘案例的测试中失败。在检测 URL 时,总是最好依赖专门的库。 Here's why.

以上是关于提取并添加指向字符串中 URL 的链接 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

当您有重复的子字符串时如何正确替换字符串?

从给定的字符串中提取 url [重复]

从字符串中提取 URL

指向友好 URL 的 HTML 表单 [重复]

从Javascript中的URL中提取一部分[重复]

华为python机试题目:整数与IP地址间的转换图片整理字串的连接最长路径查找提取不重复的整数字符串合并处理字符串最后一个单词的长度删除字符串中出现次数最少的字符