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

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

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

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

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

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

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

【问题讨论】:

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

标签: javascript regex url


【解决方案1】:

这很简单:

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

输出:

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

【讨论】:

  • 上面的代码会在很多边缘案例的测试中失败。在检测 URL 时,总是最好依赖专门的库。 Here's why.
  • @DanDascalescu 我同意
  • @SeanPatrickFloyd:谢谢! BTW/OT:有机会考虑this reopen requestthis 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.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多