一种宽松的写法,匹配规则如下:
- 匹配 http://、https://、www. 开头的文本
- 结尾匹配非单词边界,非换行符,非空格,非换页符,非回车符,非<,非>
- 结尾匹配不可见字符(
\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
}