[TS]テキスト中からURLを抜き出してリンクタグに変換する

typescript

テキストの中から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があるとバグったりして意外と手間取りました。

タイトルとURLをコピーしました