Aikの技術日記

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

正規表現記法についてまとめてみた その3

その1(正規表現の概要)はこちら
その2(正規表現特殊文字について)はこちら
その4(JavaScriptでの正規表現使用法 その2)はこちら

はじめに

知っていると超便利な記法、正規表現
前回の記事では、正規表現特殊文字…まぁ言ってしまえば正規表現の記法に関して、ですかね。
そちらを網羅していきました。

今回の記事では、JavaScript上での正規表現の使い方について見ていこうと思います。
どうしてJavaScriptなのかは、多分この言語が今後筆者と関わりが一番深そうな言語だから…という理由もありますが…。

最大の理由は、今回正規表現を学び直すきっかけになったCODEPREPさんのブックでは、JavaScript正規表現を扱ってたからです。
まぁそんな余談はそこそこに、早速見ていきましょう。

JavaScript上での正規表現の扱い方

紹介に入る前に今回の参考記事を下記に載せておきます。
正規表現 - JavaScript | MDN
正規表現 (RegExp) | JavaScript 日本語リファレンス | js STUDIO

それでは行きましょう!

正規表現オブジェクトの生成

JavaScript正規表現を扱うには、まず正規表現オブジェクトを生成する必要があります。
これは正規表現を表す文字列を/で括る(正規表現リテラルを使う)か、RegExpオブジェクトのコンストラクタ関数を呼び出す事により生成されます。

var reg = /abc/;
var reg = new RegExp("ab+c");

前者の正規表現リテラルで生成した場合、正規表現オブジェクトはスクリプトのロード時にその正規表現コンパイルします。
正規表現パターンが定義したものから変わらない場合は、こちらにした方がパフォーマンス面で良いそうです。

なお、後者のコンストラクタ関数を使用して生成した場合、正規表現オブジェクトは実行時にその正規表現コンパイルします。
こちらを使用すれば、正規表現パターンを後から変更出来るので、正規表現パターンが変化したり、後から正規表現パターンを入れ込む場合はこちらを使いましょう。

またRegExpオブジェクトが持つプロパティを、コード例とともに下記に記します。

var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
プロパティまたはインデックス 説明 この例の場合
lastIndex 次のマッチが始まる位置(このプロパティはgオプションを用いる正規表現でのみセットされる) 5
source 使用された正規表現パターンのテキスト "d(b+)d"
ignoreCase オプションフラグiが有効か示す false
global オプションフラグgが有効か示す true
multiline オプションフラグmが有効か示す false
sticky オプションフラグyが有効か示す false

※この中の「lastIndex」というプロパティに関しては、matchメソッド解説時に再度詳しく述べたいと思います。

オプションフラグというものも出てきましたね…。
次はそちらを見てみましょう。

オプションフラグについて

正規表現代入時には「オプションフラグ」というものを指定できます。
こんな感じに指定します↓

// 正規表現リテラルを用いる場合
var regexp = /abc/i;
// RegExpオブジェクトを用いる場合
var regexp = new RegExp("abc", "g");

これを指定することで、正規表現にオプション機能を加えることができます。
なお、オプションフラグだけを後から変更することはできません。

オプションフラグには5種類あり、それぞれ下記のような形になっています。

オプションフラグ 説明 フラグ名の由来
i 大文字小文字を区別しない ignore case
g 1つ目だけのマッチを対象にするのでは無く、全体からマッチ対象を探す global match
m 複数行検索(^$が各行の先頭/最後尾を示すようになる) mulch line
u パターンをユニコードのコードポイントの連続として扱う unicode
y ※長文なので下記参照 sticky(寛容という意)

y - 付箋(sticky) 対象となる文字列での正規表現のlastIndexプロパティが指し示すインデックスからのみにマッチします。(また、それ以降のマッチを試みません)
これは、lastIndexプロパティの値を変更することによって任意の場所で、 "開始場所にのみマッチ"する特殊な文字列"^"の機能を、有効に活用することを出来るようにしてくれます。

※参考記事: 正規表現 (RegExp) | JavaScript 日本語リファレンス | js STUDIO

また、オプションフラグは複数まとめて指定することもできます。
こんな感じに…↓

var regexp = /abc/im;

さて、これで正規表現の基本的な宣言方法はまとめられたと思います。
次は正規表現を扱えるメソッドに関してまとめていこうと思いま…したが、こちらもちょっと長くなりそうなので…。
今回はJavaScriptでの正規表現前編ということで、メソッドに関しては後編の記事にまとめていきたいと思います。

次回記事では

次回記事では先にも言った様に、JavaScript正規表現を扱うためのメソッドについてまとめていきます。
なお、次回記事も結構長いです。メソッドの量が少なかったので、1つ1つ丁寧にまとめて行ったのが仇でした…。
頑張って書きたいと思います(震え)。

ではでは|д゚)