更改受正则表达式影响的字符串中URL的颜色

时间:2013-06-03 02:59:02

标签: javascript jquery

我正在尝试更改字符串中某些regular expression匹配的网址的颜色。

这是我的代码:

$(document).ready(function(){

    //Change the color of words containing the @ sing
    $("#modal_0 section p").html(function(_, html){
        return html.replace(/(\@\w+)/g, '<span class="change_color">$1</span>');
    }); //Works fine

    //Change the color of words containing URLs (www.domain.com, domain.com, etc.)
    $("#modal_0 section p").html(function(_, html){
        return html.replace(/^(?=www\.)?[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$/, '<span class="change_color">$1</span>');
    }); //Doesn't work
})
;

当我尝试捕捉包含@ sing的单词时,该功能正常工作。而且我没有看到正则表达式有任何问题。

以下是 the fiddle

2 个答案:

答案 0 :(得分:2)

删除这些锚点,添加一个捕获组,它将起作用:

/(?=www\.)?([A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+)/

演示:http://jsfiddle.net/JssZm/1/

答案 1 :(得分:1)

你的正则表达式不合适,开头有^而末尾有$,这意味着它只匹配那些将域名作为唯一内容的p somedomain.com {1}}。

此外,您错过了添加捕获组。

//Change the color of words containing urls (www.domain.com,domain.com,etc)
$("#modal_0 section p").html(function(_, html){
    return html.replace(/(?=www\.)?([A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+)/, '<span class="change_color">$1</span>');   
});

演示:Fiddle