sikaku

正規表現のエスケープ用関数

正規表現のエスケープをするJavaScript用関数です。 別件で入用だったので作成しました。

正規表現メモ

source code

関数

Javascript
  1. function RegExpEsc(str,flg){
  2. switch( Object.prototype.toString.call(str) ){
  3. case '[object RegExp]' : return str;
  4. case '[object String]' : break;
  5. default: return false;
  6. }
  7. str = str.replace(/[\-\/\\|^$*+?.(){}\[\]]/g,'\x5c$&');
  8. return ( flg=='string' ) ? str : RegExp(str,flg);
  9. }

呼び出し

RegExpEsc(str,flg)

→例:RegExpEsc('http://xxx.jp','gi')

引数
  • str
    • ここで指定した文字列がエスケープされます。
    • string型で指定
  • flg
    • ここで戻り値の型を指定します。
    • string型で指定

    'string'string型で戻す

    呼:RegExpEsc('http://xxx.jp','string')

    戻:'http:\/\/xxx\.jp'

    ▽他全て : RegExp型で戻す

    呼:RegExpEsc('http://xxx.jp','gi')

    戻:/http:\/\/xxx\.jp/gi

    未指定時デフォルト採用

    正規表現用フラグを指定しておくと、そのフラグが追加された正規表現型で返します。

戻り値

string型もしくはRegExp型(flg部分で選択)

引数str指定の文字列内の、下記の記号前に\を追加して戻ってきます。

-/\^$*+?.|()[]{}

おまけ

jQuery導入済みなら、はこっちの方がスマート

jQuery
  1. switch( $.type(str) ){
  2. case 'regexp' : return str;
  3. case 'string' : break;
  4. default: return false;
  5. }

そもそもエスケープとは?

エスケープ文字-Wikipedia

かなーり雑に言うなら、その言語上で意味を持ってしまう文字を意味を持たないただの文字として扱うための処理です。

正規表現上だと.等の一部記号に特殊な意味があります。

それだと文章中に文字としてある.含めた正確な抽出ができなくて困りますよね。

という訳でそれらの意味を持つ文字を「ただの文字」として表示したい際の為に行うのがエスケープです。

上記関数だと正規表現上で意味を持つ記号の直前に、エスケープ用の記号を足すことでエスケープしています。