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

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

正規表現について

正規表現を勉強していて難しくてすぐ忘れそうだな。と思ったので、自分用メモとしてここに詳しく書いていきたいと思います!

.
.
.

正規表現とは?

そもそも正規表現とは文字列に特定の文字が含まれているか確認したり、
その文字をとりのぞくなどの処理を行ったりする技術全般のことをいう。


正規表現の基本メソッドとして以下の二つがある。

Replace()メソッド

var pass = 'Hoge1234';

pass.repace(/Hoge/,'Suga');  

// => 'Suga1234' と表示

Replace()メソッドは文字列の中の文字を別の文字に置き換えることができる。
第一引数には/ /内に置き換えたい文字を、第2引数には’ ’内に置き換え後の文字を指定する。


match()メソッド

var aisatu = 'Hello,Suga';

aisatu.match(/Suga/);

//=>"["Suga"]" と配列で返ってくる。ヒットしない場合はnullで返す。

match()メソッドは引数で/ /内で指定した文字列が含まれているか検索する
見つけた場合は配列で、見つけられなかった場合はnullで返す。

以上のように/ /で正規表現を作成することができる

さらに

var str = /words/;

このように変数にも正規表現を定義でき、これをreplace()メソッドやmatch()メソッドにも使うことができる

これを正規表現リテラルという

RegExpメソッド

正規表現の仕方については正規表現リテラルを使用する方法の他にもう一つ、正規表現を定義するメソッドであるRegExpメソッドというものがある。

var word = 'Suga';

var str = new RegExp(word + '1234');

RegExpメソッドはコンストラクタだから、newしないと正規表現が定義されないらしい。そこらへんはまだちょっと難しくてわからないな。。。

これで正規表現リテラルの var str = /Suga1234/; と同じ意味になる。

同じ意味になるなら、なんで一つに統一しないの!?と思ったので調べてみた



どうやらRegExpは 変数を使用できたり、+で文字と文字を連結できたりするから勝手がいいっぽい。
正規表現リテラルの方も、電話番号のように固定された表現の場合はよく使われるとのこと。

奥が深いなぁ。