2

我正在尝试更改字符串中某些正则表达式匹配的 URL 的颜色。

这是我的代码:

$(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 的单词时,该函数工作正常。而且我认为正则表达式没有任何问题。

这是 小提琴

4

2 回答 2

2

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

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

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

于 2013-06-03T03:03:07.193 回答
1

您的正则表达式不正确,它^在开头和$结尾都意味着它将仅匹配那些p将域名作为唯一内容的内容,例如somedomain.com.

您也错过了添加捕获组。

//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>');   
});

演示:小提琴

于 2013-06-03T03:02:55.360 回答