プログラミングをし始めた人も時折目にする正規表現。
正規表現について軽くまとめてみました。
簡単にいうと、
文字列に特定の文字が含まれているかを確認することや、特定の文字を取り除くなどの操作を行うための技術が正規表現です。
例えば複数のユーザーが電話番号を入力する時にハイフンをつける人とつけない人が混合してしまったとします。
そうすると異なるフォーマットでデータが保存されてしまい、ユーザーの情報が管理しづらくなります。
そんな時に正規表現を使うと全てのデータのハイフンを取り除いて保存することができるので非常に便利です。
そのほかにも正規表現の使われるシーンはいくつかあります。
・文字列の一部を置換する
・文字列が制約を満たしているか確認する
・文字列の一部を抽出する
などです。
ではJavaScriptでの正規表現における重要なメソッドをみてみましょう。
- replaceメソッド
var str = "リンゴを食べます。";
str.replace(/リンゴ/, 'みかん');
=> "みかんを食べます。"
replaceメソッドは、文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
第一引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定します。
また、操作したい文字列は/で囲みます。
2, matchメソッド
var str = "Hello World";
str.match(/Hello/);
=> ["Hello"]
str.match(/good/);
=> null
matchメソッドは引数に指定した文字列がレシーバの文字列に含まれているか否かをチェックするためのメソッドです。
含まれている場合は、指定した文字列が要素となった配列が返り値として得られます。
また、含まれていない場合は、返り値としてnullが得られます。
電話番号からハイフンを取り除いてみる。
var number = "090-1234-5678";
number.replace(/-/g, "");
=> "09012345678"
replaceメソッドの第一引数の後ろについているgはなんだ?という感じですが、これはグローバルマッチと呼び、文字列内で指定した文字が複数含まれている場合、その全てを置換するというオプションになります。
なのでもしこのgをつけなかった場合、初めのハイフンのみが置換されて、二つ目のハイフンはそのままになってしまいます。
*パスワードに英数字8文字以上という制約を設定する。
var pass = "Hello123";
if (pass.match(/[a-z\d]{8,}/i)) {
//パスワード設定の処理
}else {
alert('パスワードの形式が間違っています。');
}
条件分岐を設定してパスワードの形式が正しいかどうかを判定している。
[](角かっこ)を使用することでこれに囲まれた文字のいずれか1つがマッチするかどうかをチェックしています。
[a-z\d]: a ~ zまでの英文字と数字にマッチ(\dは数字を表す。)
{n, m}: 直前の文字が少なくともn回、多くてもm回出現するものにマッチ。(ここでは少なくとも8回出現するものにマッチ。)
i: 大文字・小文字を区別しない検索。
*メールアドレスの@以下を抽出する。
var mail = 'aaa123@xmail.com';
mail.match(/@.+/);
=> "@xmail.com"
. : どの1文字にもマッチ。
+ : 直前の文字の一回以上の繰り返しにマッチ。
つまり、@以下にある任意の文字の一回以上の繰り返しにマッチするということ。
以上、初心者が触れてみた簡単な正規表現の書き方でした。