【发布时间】:2012-09-08 03:40:35
【问题描述】:
我有以下代码用于将文本中的 http URL 转换为锚标记。它正在寻找以 http 开头的任何内容,并被空格(或输入的开头/结尾)包围
function linkify (str) {
var regex = /(^|\s)(https?:\/\/\S+)($|\s)/ig;
return str.replace(regex,'$1<a href="$2" target="_blank">$2</a>$3')
}
// This works
linkify("Go to http://www.google.com and http://yahoo.com");
// This doesn't, yahoo.com doesn't become a link
linkify("Go to http://www.google.com http://yahoo.com");
它不起作用的情况是如果我在两个链接之间只有一个空格。我假设是因为两个链接之间的空间不能用来匹配两个 URL,在第一次匹配之后,URL 后面的空间已经被消耗掉了。
有人可以建议一种正则表达式方法吗?我可以自己扫描字符串,寻找一种正则表达式的方式(或者某种不需要我自己扫描字符串并自己构建新字符串的方式。
【问题讨论】:
-
为什么要以空格开头?为什么不让您的正则表达式模式以 http 开头并以它找到的第一个空格匹配结束。然后您的第二个链接将被匹配,因为它包含 http 直到匹配到空格。
-
@Mark 因为我不希望“你http://ww.google.com 成为链接”
-
在这种情况下,您将不会成为链接的一部分。 google.com 会,你只是链接前的一个字符串。我认为这将是一种更准确的查找有效链接的方法。
-
@Mark,我基本同意,但是如果您查看此评论,XXXhttp://www.google 并没有成为链接。这就是它的具体实施方式
-
不错,但其他人的做法还有改进的余地。如果有人粗心评论并忘记在“单击此处”和 url 之间放置一个空格,如果我们知道它是有效的,我们没有理由无法匹配 url,因为它包含协议、域和 TLD .真正的挑战是知道网址是否包含顶级域名。
标签: javascript regex url