JScript の new RegExp

やりたいこと

var re =  /<a href="(http:\/\/foo\.bar\/\?name=(d_[0-9_]+\.[^"]+))">/g;

の「http:\/\/foo\.bar\/」の部分を可変にしたい。できれば「http://foo.bar/」という文字列から上記正規表現を生成したい。

やったこと

var re2_str =  '<a href="(http:\/\/foo\.bar\/\?name=(d_[0-9_]+\.[^"]+))"';
var re2 = new RegExp(re_str, 'g') ;

結果: NG

以下のdebug文を埋め込んで、re と re2 の中身を比較したら、re2 には「\」が消えていることが判明。

  WScript.Echo(re) ;
  WScript.Echo(re2) ;

念のために、re2_str の中身を確認したら、re2_str の時点で「\」が消えていることが判明。

改善策

var re2_str =  '<a href="(http:\\/\\/foo\\.bar\\/\\?name=(d_[0-9_]+\\.[^"]+))"';
var re2 = new RegExp(re_str, 'g') ;

re2_str の中の「\」を全部「\\」に変える。
結果:OK

ただし、これだと、URLの外出しが実現できないので、以下のように修正。

改善策2

var re21_str = 'http://foo.bar/';
// 「/」と「.」の前に「\」を挿入する。
var re22_str = re21_str.replace(/[/.]/g, "\\$&") ;
var re2_str =  '<a href="(' + re22_str + '\\?name=(d_[0-9_]+\\.[^"]+))"';
var re2 = new RegExp(re_str, 'g') ;

これで、やっとURL部分の外出しができました。
※「?name=」以降の部分は、可変にする必要は無いので、\\のままにしています。