フォームの処理で、「郵便番号じゃないから書き直して!」「ふりがなじゃないから書き直して!」というのをやろうとしたとき、正規表現というものが必要になりました。
ちょっと練習もかねて少しみてみます。
##正規表現って?
http://gimite.net/help/devas-ja/all_regex.html
ここにある記号たちをうまいこと組み立てて行きます!
JavaScriptで正規表現を表す際には以下の二種類の構文になります。
var str = /正規表現/オプション; //リテラル
var str = new RegExp('正規表現','オプション'); //コンストラクター
ちなみにオプションというのは主に以下の種類があります。
g
・・・グローバルリサーチ(一致する全ての文字列を返します。)
i
・・・大文字・小文字を区別しない
m
・・・複数行検索(^と$が各行の先頭末尾にマッチ)
s
・・・sを改行文字と一致するようにする
##レッツ!正規表現
/...a/
こちらの.
は任意の一文字を表すので、
abca,3iGa,bbbaなどが当てはまります。
/a*b+/
*
は直前文字の0回以上の繰り返し、+
は直前文字の1回以上の繰り返しです。
b,abbb,aaab,bbbbなどになりますね。
「****は庭だよ。」は「ハニワだよ」という意味の可能性があるですね。省略可能なのがみそです。
/みみ?ず/
?の直前の文字は省略可能です。
みみず か みず が検索できますね。
/^はるが/
これは先頭が「はるが」のものの身を検索します。
/$落ちた/
これは行末が落ちたのみを検索します。
/^はるが.*落ちてきた$/
はるが二階から落ちてきた、などがヒットします。(元ネタ重力ピエロ)
.
と*
のコンビ技です。
/ヒトカゲ|ゼニガメ|フシギダネ/
これはヒトカゲ、ゼニガメ、フシギダネが検索できます。
囲われたどれかに一致したら検索できます。
/[桃金喰]太郎/
桃太郎、金太郎、喰太郎が一致します。どれかの文字がヒットしたら検索できます。
/[0-9][A-Z]/
2B,9S,などがヒットします。A2はヒットしません...(元ネタニーアオートマタ)
このように複数文字をまとめてセットすることもできます。
/[0-9]{3}/
{3}は直前を三回繰り返すということ。
050,214,555とかがヒットします。
/[0-9]{2,}
こちらは2桁以上の数字になる。
04,210,43508510926とかがヒット。
/[^abc]
abc以外の文字にマッチ。
##定義済みの文字クラス
\d
・・・[0-9]と同じ意味。数字。
\D
・・・[^0-9]と同じ意味。数字以外。
\s
・・・空白文字。[\t\n\x0B\f\r]
\S
・・・空白文字以外[^\s
##エスケープ文字
\/
・・・/
##使用例
郵便番号を表してみましょう。
/^\d{3}-\d{4}$/
^と$が指定されてるので完全一致ですね。
\dは数字を表すので、数字3桁-数字4桁
という意味になっています!