前回、PHP版を書いたので今回はJavaScript版。
var str = "JavaとJavaScriptは名前は似てるけど、違うプログラミング言語だよ"; var word_list = new Array("Java", "JavaScript", "プログラミング言語"); var reg_list; var desc; var i = 0; word_list.sort(function(val1, val2) { return val2.length - val1.length }); var reg = "("; var wl_length = word_list.length; for(i = 0; i < wl_length; i++) { if(reg !== "(") reg += "|"; reg += word_list[i]; } reg += ")"; reg_list = new RegExp(reg, 'g'); str = function() { return str.replace(reg_list, function(all, $1) { return '<a href="http://ja.wikipedia.org/wiki/' + encodeURIComponent($1) + '">' + $1 + '</a>'; }); }(); document.write(str);
7行目で文字列の長い順にソート、11行目から16行目で正規表現オブジェクトを生成し、18行目から22行目で置換(とURIエンコード)してます。replaceの第二引数に関数が指定できると分かると、PHPより簡単にできました。
WordPressじゃうまく動かないようなので、実行結果は載せません(お願いだから、勝手にシングルクォテーションをダブルクォテーションにしないでくれ・・・)。
ところで、前回のPHP版も今回のJavascript版も、あくまでタグがないテキストのみ機能します。タグのあるテキストで今回紹介したアルゴリズムを使うと、タグ構造が壊れてしまう可能性があるので注意。
コメント