テキストの中からURLを抽出してリンクタグに変換する関数を書いてみた。
だいたいこんな感じ
function autoLink(str:string) {
const regexp_url = /(https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#\u3001-\u30FE\u4E00-\u9FA0\uFF01-\uFFE3]+/g;
var regexp_makeLink = function(url:string) {
return '<a href="' + url + '" target="_blank" rel="noopener">' + url + '</a>';
}
if (str.match(regexp_url) != null) {
const urlAllMatches = str.match(regexp_url);
if(urlAllMatches){
const urlMatches = new Set(urlAllMatches);
urlMatches.forEach(url => {
str = str.replaceAll(url, regexp_makeLink(url));
});
}
}
return str;
}
http?sで始まり半角・全角スペース改行までの文字列をURLとして取り扱い、Aタグに変換します。
日本語を考慮したり、同じURLがあるとバグったりして意外と手間取りました。