JavaScriptで自動キーワードリンク

前回、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版も、あくまでタグがないテキストのみ機能します。タグのあるテキストで今回紹介したアルゴリズムを使うと、タグ構造が壊れてしまう可能性があるので注意。

コメント

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