Web サイト構築のスタンダードである JavaScript 言語の入門サイト。実用的なサンプルコードを用いて平易に解説
JavaScript 入門JavaScript 入門
JavaScript 開発環境
JavaScript の基本
ブラウザの JavaScript
JavaScript の発展的な話題
関連サイト
サイト情報

正規表現

スポンサーリンク

正規表現 (Regular Expression) を使うと、文字のパターンを記述することができます。

例えば電話番号を「数字3桁、ハイフン、数字3桁、ハイフン、数字4桁の並び」(例: 123-123-1234) とする、と決めたら、 プログラムのユーザーに電話番号を入力してもらうときには、そのパターンに合致しているかどうか入力検証したいですよね。

一文字一文字チェックするコードを書けば、確かにそれを実現するコードは書けるでしょうが、通常は正規表現で文字のパターンを記述しておき、 そのパターンとマッチするかどうか、というチェックを行ないます。

さらに、「最初の数字3桁は市外局番」とみなせば、123-123-1234 という入力を (123) 123-1234 という風に書き換えたい場合もあるかもしれませんね。

正規表現を使うと、そうしたパターンにマッチした箇所の抜き取り、置換、という操作が簡単に行なえます。

ここでは、JavaScript で正規表現をどのように扱うか説明します。

RegExp オブジェクトによる正規表現

JavaScript では RegExp オブジェクトで正規表現のパターン定義や操作を実行できます。

早速、具体的な例で使い方を見てみましょう。

前述の「数字3桁、ハイフン、数字3桁、ハイフン、数字4桁の並び」というパターンを表す RegExp オブジェクトは次のように書けます。

var r = new RegExp("^[0-9]{3}-[0-9]{3}-[0-9]{4}$");

このパターンは次のようになっています。

^ (文字列の始まり)
[0-9] (0 から 9 までの文字)
{3} (3個続く)
- (ハイフン)
[0-9] (0 から 9 までの文字)
{3} (3個続く)
- (ハイフン)
[0-9] (0 から 9 までの文字)
{4} (3個続く)
$ (文字列の最後)

正規表現を表す文字列リテラルはスラッシュ (/) で定義します。上と同様の内容が文字列リテラルを使うと、次のように書けます。

var r = /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/;

パターンマッチングの実行

RegExp オブジェクトのメソッドでパターンマッチに使うのは、test() と exec() メソッドです。

test() メソッドはパターンにマッチしたかどうか true/false を返します。次の例では test() は true を返します。

var r = /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/;
var s = '123-456-7890';
var m = r.test(s);
if( m ){
	alert('MATCH');
}
else{
	alert('NOT MATCH');
}

exec() メソッドではマッチした部分を取り出すことができます。また、パターンの一部を () で囲むと、部分的なマッチを取り出すことも可能です。

次の例を見てください。パターンを数字の3桁、3桁、4桁という箇所を () で囲っています。

var r = /^([0-9]{3})-([0-9]{3})-([0-9]{4})$/;
var s = '123-456-7890';
var m = r.exec(s);
if( !m ){
	alert('NOT MATCH');
}
else{
	for(var i=0; i<m.length; i++){
		alert('[' + i + '] = ' + m[i]);
	}
}

この実行結果は、次のようになります。

m[0] = '123-456-7890'
m[1] = '123'
m[2] = '456'
m[3] = '7890'

文字クラス

上の例では数字を表す箇所を [0-9] と書きました。このように正規表現中で1文字を表す部分を文字クラス (character classes) といいます。

文字クラスはいろいろな書きかたができます。例えば、[0-9] は \d と書くことも可能です。次のパターンは前述のパターンと同じ意味になります。

var r = /^(\d{3})-(\d{3})-(\d{4})$/;

その他、a から z なら [a-z]。a から z 及び 0 から 9 であれば [a-z0-9] などと書けます。ASCII 文字と括るなら \w とすることも可能です。

繰り返しを表す場合は {} で書きます。{2} は文字クラス2回、{1,3} は 1 回から3回のどれか。{1,} は 1回以上。{1,} は + と同じ、などいろいろな書き方ができます。

いろんなパターンがあり、ここでは網羅しません。一冊何か見やすい本などを手元に置いておくと便利です。 » Amazon で正規表現関連書籍を表示


スポンサーリンク
小山圭介 著者
小山 圭介
4/15/1973生
米国在住のソフトウェアエンジニア。ITコンサルタント
»プロフィール
スポンサーリンク

© 2012 JavaScript 入門