エンジニアのサブルーチン

あまり注目されない組み込みのシステムエンジニアをやっています。エンジニア業界のこととか、勉強したこととかを不定期に更新していきます。

正規表現をさらに詳しく

前回(正規表現について - sugaのガムシャラ向上心)

正規表現の基礎的な部分を書いたけど、それについてさらに詳しく書いていくよ

より複雑な正規表現

var pass = 'Suga1234';
pass.match(/[a-z\d]{8,}/i);
//=>["Suga1234"]

は?意味わからん



てことで1つずつ分解していく

...

[a-z]: [ ]内の文字のどれか1個がレシーバの文字列内にあればマッチする。a-zというのはアルファベットaからzのいずれか、という意味。


\d:レシーバの文字列内に数字があればマッチ。


{n,m}:直前の文字が少なくともn回、多くてもm回連続で出現するものがあればマッチする。


i :オプション または修飾子、フラグと呼ばれるもので、最後に加えると大文字と小文字を区別しなくなる。


つまり、大文字と小文字関係なく、英数字が少なくとも8回以上連続で出現した場合マッチするということ。うーんこう書くとわかりやすいよね。

...

オプションについて

iのようなオプションは他にも色々あるので、書いておくよ。

g:グローバルオプションと言われるもの。通常の正規表現では複数マッチしても、最初にマッチしたものしか返さないが、これを使う事で複数マッチに対応する。

var number = '123456789';
number.match(/\d{1,3}/g);
//=> ["123","456","789"]


m:複数行の文字列に対応する

"123\n456\n789".match(/^456/)        // マッチしない
"123\n456\n789".match(/^456/m)       // マッチする

改行がある場合だと、先頭から最初の改行までしか検索されないっぽい。
それを解決するのがmオプションってこと。


y:lastindexで指定した位置から検索を開始する。

ar re = /Test/y

re.lastIndex = 0;
re.test( 'Test' )     // true

re.lastIndex = 2
re.test( 'xTest' )    // false

これは便利そう。要チェック。

...


ブログ初めて一日目。慣れてなくて結構時間かかって疲れたけど、ノートに書くより詳しく色々調べれたりして、アウトプットする事で、別の用語もインプットされるので、結構メリットがある。もっといろんなことを書いて、どんどん上達していくぞ!