2016.10.22
2020.1.10

URLをHTMLのリンクに置換して表示する方法

URLをAngularJSの「filter」を使って画面表示時にリンク<a>に置換する方法です。

コード

JavaScript


angular.module('myApp', ['ngSanitize'])
.filter("replaceHtmlUrl", function(){
    var urlPattern = /(http|ftp|https)(:\/\/[\w-.!~*¥'();¥/?:¥@&=+¥$,%#]+)/gi;
    return function (str, exp) {
        angular.forEach(str.match(urlPattern), function (url) {
            str = str.replace(url, "<a href='" + url + "' target='_blank'>" + url + "</a>");
        });
        return str;
    };
});

HTML


<div ng-bind-html="message | replaceHtmlUrl"></div>

ポイントは「ngSanitize」モジュールを利用していることと、変換後の文字列を「ng-bind-html」でバインドしている点です。

正規表現については「正規表現 - JavaScript | MDN」を参照。

実際の表示

Webサイト「https://oar.st40.xyz/」では、主にプログラミングに関するメモをまとめています。

という文字列をfilterを通して表示すると、

Webサイト「https://oar.st40.xyz/」では、主にプログラミングに関するメモをまとめています。

のように表示されます。

AngularJS】関連記事