旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

javascriptで正規表現のメタ文字をエスケープしたいけど

2007年9月6日

ユーザのタグ入力に対する補完機能を実装していたときのこと

// 候補リスト
var tags = ["javascript", "php", "ruby"];
// タグ区切り文字はカンマ
// 最後のカンマ以降で半角空白をトリムした文字列が補完対象の入力
var pattern = foo.value.replace(new RegExp('^.*,[ ]*', ""), "");
for (var i = 0; i < tags.length; i++) {
if (tags[i].match(pattern) !== null) {
// 入力フォームの下に補完候補リストを表示する処理
};
};

これで完璧じゃないかと思ってたら、ユーザの入力(foo.value)の中に正規表現のメタ文字が入る場合に、それをそのままメタ文字として解釈してしまうのでよろしくない。

んー、メタ文字をエスケープする便利関数は、ネイティブだと無くて、ネットでググっても見つからない。
仕方ないので、String.match の替わりに String.indexOf を使うことで逃げました。
どっかに、メタ文字を全部エスケープしてくれる関数は無いっすかねー。