文本中网址转换为链接的方法

223 阅读1分钟

一种宽松的写法,匹配规则如下:

  1. 匹配 http://、https://、www. 开头的文本
  2. 结尾匹配非单词边界,非换行符,非空格,非换页符,非回车符,非<,非>
  3. 结尾匹配不可见字符(\u200B),比如钉钉复制过来的链接可能会携带不可见字符,额外拼接空白url16进制编码 %E2%80%8B,导致打开网页出错。

代码如下

function textTolinks(text){
 	var reg1 = /((http\:\/\/|https\:\/\/)[^\s\b\r\n\f\<\>\u200B]+)/g;
    var reg2 = /(www\.[^\s\b\r\n\f\<\>\u200B]+)/g;
     if (reg1.test(text)) {
        text = text.replace(reg1, '<a style="cursor:pointer" data-href="$1" onclick="readUrl(this)" target="_blank" rel="noopener norefferrer" >$1</a>')
    } else if (reg2.test(text)) {
        text = text.replace(reg2, '<a onclick="readUrl(this)" style="cursor:pointer" data-href="http://$1"  target="_blank" rel="noopener norefferrer" >$1</a>')
    }
    console.log(text)
    return text
}