正規表現に変数を使う

"abcdefghijklmnopqrstuvwxyz"から"EFG"を大文字小文字を無視して正規表現で抜き出すとする。

var str    = "abcdefghijklmnopqrstuvwxyz";
var result = str.match(/EFG/i);
alert(result); //efg

問題なく抜き出せるが、マッチパターンが/EFG/とハードコーディングされている。

EFGを変数に置き換えてみる

var str     = "abcdefghijklmnopqrstuvwxyz";
var pattern = "EFG";
var result  = str.match("/" + pattern + "/i");
alert(result); //null

nullとなり、正常に動いていない。
マッチパターンが文字列として渡されている為だと思われるのだが、/pattern/と書くと今度は変数pattern文字列patternとして渡されるので、やはり違った動きになる。

なのでRegExpオブジェクトを使う

var str       = "abcdefghijklmnopqrstuvwxyz";
var pattern   = "EFG";
var qualifier = "i";
var reg       = new RegExp(pattern, qualifier);
var result    = str.match(reg);
alert(result); //efg

これを応用すればfor文中などでマッチパターンを動的に組み上げられる様になる。