jQuery在字符串中查找url并使用href包装(如果尚未包装)

时间:2015-04-24 12:03:48

标签: javascript jquery regex

我需要在导入的字符串中将href包装在匹配的url周围 - 但是在某些情况下,url已经设置了href属性,因此它们不需要包装。我在这个早期阶段的代码如下

if(jQuery('.single-ai1ec_event')) {
        var httpSelector = '.single-ai1ec_event .entry-content, .single-ai1ec_event .p-location';
        var searchText = jQuery(httpSelector).text();
        var expression = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
        var urls = searchText.match(expression);
        var wrappedUrl;
        if (urls) {
            for (var i = 0, il = urls.length; i < il; i++) {
                jQuery(httpSelector).html(function () {
                    wrappedUrl = wrap(urls[i]);
                    jQuery(this).html(jQuery(this).html().replace(urls[i], wrappedUrl));
                });
            }
        }
    }

    function wrap(str) {
        return '<a href="' + str + '" target="_blank">' + str + '<\/a>';
    }

我目前正在寻找一种方法来排除那些设置了href属性但没有太大成功的包装网址。

1 个答案:

答案 0 :(得分:1)

您可以更改选择器以排除没有href标签的锚点,如下所示:

:not([href])

然后您的选择器变为:

var httpSelector = 'a:not([href]).single-ai1ec_event ...';