素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

正規表現をエスケープする方法と、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すればいい。