Jquery 如何将锚定标记添加到字符串中的URL

Jquery 如何将锚定标记添加到字符串中的URL,jquery,string,anchor,Jquery,String,Anchor,我有几个字符串包含youtube链接(字符串中不同的长度和位置,不是每个字符串都包含URL)和文本。这些字符串将被写入段落标记中,但我希望URL是可点击的,所以我需要URL周围的锚定标记 我设法找到了访问包含链接的段落的方法: if($("#facebookFeed p:contains('http')").length){ //do stuff } 我被困在这里,不确定这样做是否正确 以下操作就可以了 $("#facebookFeed p:contains('http')").eac

我有几个字符串包含youtube链接(字符串中不同的长度和位置,不是每个字符串都包含URL)和文本。这些字符串将被写入段落标记中,但我希望URL是可点击的,所以我需要URL周围的锚定标记

我设法找到了访问包含链接的段落的方法:

if($("#facebookFeed p:contains('http')").length){
    //do stuff
}
我被困在这里,不确定这样做是否正确

以下操作就可以了

$("#facebookFeed p:contains('http')").each(function() {
    $(this).wrapInner('<a href="' + $(this).text() + '"/>');
});
$(“#facebookFeed p:contains('http')”)。每个(函数(){
$(this.wrapInner()

当然,这假设了某种HTML布局。 如果你的是不同的,那么请发布一个HTML示例。

下面就可以了

$("#facebookFeed p:contains('http')").each(function() {
    $(this).wrapInner('<a href="' + $(this).text() + '"/>');
});
$(“#facebookFeed p:contains('http')”)。每个(函数(){
$(this.wrapInner()

当然,这假设了某种HTML布局。
如果您的URL不同,请发布一个HTML示例。

您必须使用正则表达式匹配字符串中的URL,然后将它们包装在锚中:

$('p:contains("http://")').html(function(index, html) {
    var url = html.match(/(((ftp|https?):\/\/)[\-\w@:%_\+.~#?,&\/\/=]+)|((mailto:)?[_.\w-]+@([\w][\w\-]+\.)+[a-zA-Z]{2,3})/g);

    $.each(url, function(i, v) {
        html = html.replace(v, '<a href="' + v + '">' + v + '</a>');        
    });

    return html;
});
$('p:contains(“http:/”)).html(函数(索引,html){
var url=html.match(/((ftp|https?:\/\/)[\-\w:%\+.~\?,&\/\/=]+)(mailto:)?[\.\w-]+@([\w][\w\-]+\+[a-zA-Z]{2,3})/g);
$。每个(url、函数(i、v){
html=html.replace(v',);
});
返回html;
});
上面的示例使用中的正则表达式模式


您必须使用正则表达式匹配字符串中的URL,然后将它们包装在锚中:

$('p:contains("http://")').html(function(index, html) {
    var url = html.match(/(((ftp|https?):\/\/)[\-\w@:%_\+.~#?,&\/\/=]+)|((mailto:)?[_.\w-]+@([\w][\w\-]+\.)+[a-zA-Z]{2,3})/g);

    $.each(url, function(i, v) {
        html = html.replace(v, '<a href="' + v + '">' + v + '</a>');        
    });

    return html;
});
$('p:contains(“http:/”)).html(函数(索引,html){
var url=html.match(/((ftp|https?:\/\/)[\-\w:%\+.~\?,&\/\/=]+)(mailto:)?[\.\w-]+@([\w][\w\-]+\+[a-zA-Z]{2,3})/g);
$。每个(url、函数(i、v){
html=html.replace(v',);
});
返回html;
});
上面的示例使用中的正则表达式模式


对于初学者来说,并没有完美的URL正则表达式,但你们可以插入一个“相当好”的正则表达式来挑选URL的更多内容reliably@darkpbj说到“完美的URL正则表达式”,我很喜欢使用这个-对于初学者来说,没有完美的URL正则表达式,但您可以插入一个“相当好”的正则表达式,它将挑选出URL的更多内容reliably@darkpbj说到“完美的URL正则表达式”,我很喜欢用这个-这是正确的答案,我希望OP能解决这个问题。整个字符串都写在段落中。我的字符串看起来像:“randomtext…randomtext”.So Martijns函数创建:
randomtexthttp://www.youtube.com/... randomtext
。我需要的是:
randomtexthttp://www.youtube.com/... randomtext
这是正确的答案,我希望OP能解决这个问题。整个字符串都写在段落中。我的字符串如下所示:“randomtext…randomtext”.So Martijns函数创建:
randomtexthttp://www.youtube.com/... randomtext
。我需要的是:
randomtexthttp://www.youtube.com/... randomtext
出于好奇,为什么要测试
ftp
?我认为锚点对它们不起作用。@Admdew我使用了另一个答案中的正则表达式模式(我知道),我只是想演示如何用锚来替换匹配项。请进行编辑,以便'var url=html.match(/((ftp | https?):\/\/)[\-\w:%\+.~?,&\/\/=]+)。((mailto:)?[\w-]+@([\w][\w\-]+\)+[a-zA-Z]{2,3})/g].[]'因此url永远不会为空,而是一个空白数组。每当html变量不包含任何有效url时,就会弹出一个错误。出于好奇,为什么要测试
ftp
?我认为锚定对它们不起作用。@admdraw我使用了另一个答案中的正则表达式模式(我知道),我只是想演示如何用锚点替换匹配项。请进行编辑,使'var url=html.match(/((ftp|https?):\/\/)[\-\w:%\+.~+.~?,&\/\/=]+)\124;((mailto:)?[\w-]+@([\w][\w\-]+\)+[a-zA-Z]{2,3})/g)\[],所以url永远不会为空,而是会弹出一个空白数组。只要url不包含任何有效的url,就会出现错误。