- 正規表現 -

異なる文字列を一つの形式で表現出来る

<<メタ文字>>

. 任意の1文字 | 選択
* 0回以上の繰り返し + 1回以上の繰り返し
? 0回または1回の繰り返し () 正規表現のグループ
^ 先頭 $ 末尾
[] 文字クラス {n} n回の繰り返し
{n,} n回以上の繰り返し {n,m} n回以上m回以下の繰り返し
\ メタ文字を文字として扱う    

■文字クラスの使い方

\w [0-9a-zA-Z_] 半角英数とアンダーバー
\W [^0-9a-zA-Z_] 半角英数と数字とアンダーバー以外
\s [\t\n\r\f] 空白(半角スペース、タブ、改行)
\S [^\t\n\r\f] 空白(半角スペース、タブ、改行)以外すべて
\d [0-9] 数字
\D [^0-9] 数字以外すべて

正規表現でパターンマッチを行う場合に扱うオブジェクト

どんな事を調べたいか?マッチさせたいか。 そんな時に使うのがRegExp。


a = new RegExp("[a-z]{5}");

a〜zまでの小文字で 文字数5文字の単語を検索したい


a = new RegExp("[a-z]{5}","i"); //大文字、小文字を区別しない。

a = new RegExp("[a-z]{5}","g"); //マッチしたものすべて取得する。

iは他にマッチするものがあっても、最初にマッチしたものしか取得しない。 すべて取得したい場合には、gを付ける。

()の中のパターンを書き出すのが、RegExpオブジェクト。 それをマッチさせたい時に使うのがmatchメソッド


a = new String("I like pizar and sushi"); //String配列に文字を収納
b = new RegExp("[a-z]{5}","i"); //RegExpでパターンを生成
document.write(b);

m = a.match(/[a-z]{5}/i); //aの中でbのパターンにマッチする文字をmに収納する
document.write(m)

<<結果>>
/[a-z]{5}/i pizar ←pizarがマッチした
-------------------------------------------------
だから、
a = new String("I like pizar and sushi");
m = a.match(new RegExp("[a-z]{5}","i"));
document.write(m);
結果は同じになる

パターンマッチ

※matchメソッドは最初にマッチした1文字しか返さない。
その為、マッチするものすべて取得したい場合には + を付ける必要がある。


<script type="text/javascript">
	a = new String("IloveYOU");
	m = a.match(/[a-z]/i); //a〜zの大文字と小文字を区別しない
	document.write(m);
</script>
--------------------------------------------
<<結果>>
I //最初にマッチする1文字しか返さない
あてはまらなければ null を返す

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

<script type="text/javascript">
	a = new String("IloveYOU");
	m = a.match(/[a-z]+/i); //+を付けると、1回以上の繰り返し
	document.write(m);
</script>
--------------------------------------------
<<結果>>
IloveYOU //文字列すべて抜き出せる。

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

<script type="text/javascript">
	a = new String("IloveYOU223あなた好きよ895");
	m = a.match(/[0-9a-z]+/i);
	document.write(m);
</script>
---------------------------------------------
<<結果>>
IloveYOU223 //[0-9a-z]にマッチしなくなる直前まで取得出来る
       「あなた好きよ」の後に895数字があっても無視される

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

<script type="text/javascript">
	a = new String("IloveYOU223あなた好きよ895");
	m = a.match(/95$/); //$は末尾を指定する
	document.write(m);
</script>
---------------------------------------------
<<結果>>
95 //223を指定した場合は、文の末尾ではないのでnullが返される

◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

<script type="text/javascript">
	a = new String("IloveYOU223あなた好きよ895");
	m = a.match(/.95$/); //.が付くと、以下95の1個前の文字を返す
	document.write(m);
</script>
---------------------------------------------
<<結果>>
895 //なので結果は895になる

メールに半角英数字以外つかわれているかどうか


<script type="text/javascript">
	a = new String("cc.9_c_uc@infoseek.co.jp");
	m = a.match(/[a-zA-Z0-9_.]+@+[a-zA-Z0-9.]+$/);
	//英数字と._ そして@を挟んで英数字と._が末尾になる
	document.write(m);
</script>
---------------------------------------------
<<結果>>
cc.9_c_uc@infoseek.co.jp //$があるので、メルアドの末尾に全角文字
(空白とか半角の空白)があるとnullが返される


メールに半角英数字以外つかわれているかどうか


<script type="text/javascript">
   a = new String("http://www.yahoo.co.jp/in/dex.html");
   m = a.match(/^[a-z:.\/]+[a-zA-Z0-9_.\/]+html$|^[a-z:.\/]+[a-zA-Z0-9_.\/]+htm$/);
</script>

$末尾があるので、末尾がhtml又はhtmにいずれかが合致するとOK。

また半角英数字以外の文字(空白含む)が入力されると、null を返す。