0

我有以下代码用于将文本中的 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: //jsfiddle.net/NgMw8/

有人可以建议一种正则表达式方法吗?我可以自己扫描字符串,寻找一种正则表达式的方式(或者某种不需要我自己扫描字符串并自己构建新字符串的方式。

4

3 回答 3

2

不要捕获决赛\s。这样,第二个 url 将\s根据需要与前面的 url 匹配:

function linkify (str) {
    var regex = /(^|\s)(https?:\/\/\S+)/ig;
    return str.replace(regex,'$1<a href="$2" target="_blank">$2</a>')
}

http://jsfiddle.net/NgMw8/3/

于 2012-09-15T00:34:32.177 回答
1

在匹配您的 final 时只需使用积极的前瞻$|\s,如下所示:

var regex = /(^|\s)(https?:\/\/\S+)(?=($|\s))/ig;
于 2012-09-15T00:55:19.177 回答
0

如果有任何 html 元素粘在 url 上,则没有任何作用......

类似的问题,它的答案在这里

一些解决方案可以处理诸如“test.com/anothertest?get=letsgo”之类的 url 并附加 http://

  • 可以采取解决方法来处理 https 和其他 tld ...
于 2012-09-17T00:02:34.157 回答