正規表現をエスケープする方法と、Greasemonkeyの@includeみたいなものを実現する方法
まず、正規表現をエスケープする関数を作り、Greasemonkeyの@includeのように、*というワイルドカードを正規表現用に、.*?に置換する。
ただし、*は関数によってエスケープされてしまっていることに注意。
function escapeRegExp(str){ if(str instanceof RegExp)str=str.source; return str.replace(/([\\^$*+?.()|\[\]\{\}])/g,'\\$1'); } function poorRegExp(pattern,str){ var exp=new RegExp(escapeRegExp(pattern).replace(/\\\*/g,'.*?')); return exp.test(str); }
これだと*という文字自体を表現する方法がなくなるけど、URLに*なんて使われないので問題はない。
これには使って無いけど、調べて分かったことのメモ。
'/foo.*bar/g'みたいな文字列から正規表現を作るには、splitで区切ってnew RegExpするか、evalすればいい。