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=」以降の部分は、可変にする必要は無いので、\\のままにしています。