给内容里面的的网址添加链接

JAVA代码

项目的一个需求,给用户提交的内容中的网址添加上链接,PC端用的是jsp,所以用了taglib,用起来更加方便,关键代码:

Pattern p = Pattern.compile("(https?://|www\\.)[a-zA-Z_0-9\\-@]+(\\.\\w[a-zA-Z_0-9\\-:]+)+(/[()~#&\\-=?\\+\\%/\\.\\w]+)?");
Matcher m = p.matcher(content);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    String url = m.group();
    String href = url;
    if (!url.startsWith("http") && !url.startsWith("https")) {
        href = "http://" + url;
    }
    m.appendReplacement(sb, "<a target=\"_blank\" href=\"" + href + "\">" + url + "</a>");
}
m.appendTail(sb);

其中content是传进来的参数。Matcher类的appendReplacement方法的作用是将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个 StringBuffer 对象里,再用appendTail方法将最后剩余的内容添加到sb对象中,得到一个全部替换后的字符串。

JS代码

项目的移动端用的是reactjs,客户端渲染,所以采用了js来替换内容,关键代码:

var convertUrl = function(content) {
    if (!content) {
        return "";
    }

    let urlPattern = /(https?:\/\/|www\.)[a-zA-Z_0-9\-@]+(\.\w[a-zA-Z_0-9\-:]+)+(\/[\(\)~#&\-=?\+\%/\.\w]+)?/g;
    content = content.replace(urlPattern, function (match) {
        var href = match;
        if (match.indexOf("http") == -1) {
            href = "http://" + match;
        }
        return "<a target=\"_blank\" href=\"" + href + "\">" + match + "</a>";
    });
    return content;
}

js里面用了replace方法,但是第二个参数没有用要替换的字符串,而是用了一个方法,方法的参数是匹配到的子串,在global模式下逐个替换。

很少用到replace方法第二个参数是方法的,用法参考mdn的String.prototype.replace() 。

转载于:https://my.oschina.net/u/871551/blog/752887

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值