その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つ丁寧にまとめて行ったのが仇でした…。
頑張って書きたいと思います(震え)。
ではでは|д゚)