正規表現のエスケープ用関数
- 記述削減
- 記事再編(仕様も大幅に変更しました)
- 記事公開
正規表現のエスケープをするJavaScript用関数です。 別件で入用だったので作成しました。
source code
関数
Javascript
- function RegExpEsc(str,flg){
- switch( Object.prototype.toString.call(str) ){
- case '[object RegExp]' : return str;
- case '[object String]' : break;
- default: return false;
- }
- str = str.replace(/[\-\/\\|^$*+?.(){}\[\]]/g,'\x5c$&');
- return ( flg=='string' ) ? str : RegExp(str,flg);
- }
呼び出し
RegExpEsc(str,flg)
→例:RegExpEsc('http://xxx.jp','gi')
引数
-
str
- ここで指定した文字列がエスケープされます。
- string型で指定
-
flg
- ここで戻り値の型を指定します。
- string型で指定
▽
'string'
:呼:
RegExpEsc('http://xxx.jp','string')
戻:
'http:\/\/xxx\.jp'
▽他全て :
呼:
RegExpEsc('http://xxx.jp','gi')
戻:
/http:\/\/xxx\.jp/gi
未指定時デフォルト採用
正規表現用フラグを指定しておくと、そのフラグが追加された正規表現型で返します。
戻り値
string型もしくはRegExp型(flg
部分で選択)
引数str
指定の文字列内の、下記の記号前に\
を追加して戻ってきます。
-
/
\
^
$
*
+
?
.
|
(
)
[
]
{
}
おまけ
jQuery導入済みなら、はこっちの方がスマート
jQuery
- switch( $.type(str) ){
- case 'regexp' : return str;
- case 'string' : break;
- default: return false;
- }
そもそもエスケープとは?
かなーり雑に言うなら、その言語上で意味を持ってしまう文字を意味を持たないただの文字として扱うための処理です。
正規表現上だと.
等の一部記号に特殊な意味があります。
それだと文章中に文字としてある.含めた正確な抽出ができなくて困りますよね。
という訳でそれらの意味を持つ文字を「ただの文字」として表示したい際の為に行うのがエスケープです。
上記関数だと正規表現上で意味を持つ記号の直前に、エスケープ用の記号を足すことでエスケープしています。