LoginSignup
2
2

More than 5 years have passed since last update.

Javascript の正規表現で使用できるグルーピング

Last updated at Posted at 2018-03-02

正規表現のグルーピングとは?

グルーピングというのは、正規表現中にある()で囲んだプレースホルダを置いておくと、それをバッファに記憶してくれる機能の事を言います。
例えば、

/.*\/(.*?group1.*?)\/(.*?group2.*?)\//  # ?は最短マッチ記号

といった正規表現に、 http://abcde/fgh/agroup1_abc/bgroup2_def/a?l=1
といった文字列を食わせると、グループの1番目に agroup1_abc が、 グループの2番目に bgroup2_def が保存されます。

取得した文字列を後々何かに使えるわけですね。

グルーピングの必要性

上記のようなグルーピングが何故必要かというと、主に速度面が挙げられます。
大量のログ等をハンドリングしているような場合に、 if 文やらwhile文やらやらでぐるぐる回して文字列操作をすると、鬼のように遅くなる場合があります。
正規表現を使用すると、基本的には低レベルコーディングの段階で最適化してやってくれている(はず)なので、速度の心配をする必要が減るのですね。

例えばマスキング

ここでは、URLの中にある重要な文字列があり、それをマスキングしたいという例を挙げます。
http://agroup/boauth/auth?authorization=aioj274_45098fjkhbl&b=d
といった文字列があったとします。

この時、

var authRegExp = /(.*auth?authorization=)(.*\&)(.*)/;

といった正規表現に食わせると、
- 1個目のグループ: URLの 全部
- 2個目のグループ: URLの authorization= まで
- 3個目のグループ: URLの 1個目のグループの終わりから&まで
- 4個目のグループ: URLの &以降

がグループ分けされて配列に格納されます。

これを 配列[1] と "XXXX&" と 配列[3] ではさんで出力すると、
http://agroup/boauth/auth?authorization=XXXX&b=d
見事に出力したくない部分がマスキングされるわけですね。

コーディング例(わかりやすいようにデバッグでHTML出力)

var authRegExp = /(.*auth\?authorization=)(.*\&)(.*)/;

var authMatch = authRegExp.exec('https://test.co.jp/auth?authorization=ekhd3jklhd:ejhnm_skjh2dk&test=go');
var OUT = 'a';

if ((authMatch !== null) && (authMatch.length > 0)) {
    OUT = authMatch[1] + 'XXX&' + authMatch[3];
    document.write( authMatch[0] + '<BR/>' );
    document.write( authMatch[1] + '<BR/>' );
    document.write( authMatch[2] + '<BR/>' );
    document.write( authMatch[3] + '<BR/>' );

}

document.write( '<BR/>' );

document.write( OUT  );

これを、BracketsとChromeでデバッグするとこうなります。

image.png

めでたしめでたし。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2