連載
» 2016年10月25日 05時00分 公開

「正規表現」の基本的な使い方をJavaScriptで理解するJavaScript標準ライブラリの使い方超入門(5)(5/5 ページ)

[金城俊哉,著]
前のページへ 1|2|3|4|5       

Memo 正規表現の基本的なパターン文字列

 正規表現のパターン文字列の基本的な使い方をまとめました。

●直前の文字を0回以上繰り返す

 「*」は、直前の文字が0回以上繰り返された文字列にマッチします。このため、直前の文字が存在しない場合でもマッチします。

 *は最長一致数量子、および最短一致数量子、強欲な数量子として使うことができます。パターンを「x*」とした場合は、xが0回以上出現した場合にマッチします。

直前の文字をxとした場合
パターンを「/ax*b/」とした場合

●直前の文字を0回か1回繰り返す

 メタ文字の「?」は、直前の文字が0回、または1回出現するとマッチします。

直前の文字をxとした場合
パターンを「/ax?b/」とした場合

●結果を表示するコード例

 次は、exec()メソッドを利用して検索を行い、パターンマッチした文字列を書き出す例です。

exec()メソッドで検索

●繰り返しの回数を指定する

 繰り返しの回数を指定するには{ }を使います。文字xがn回繰り返された場合にマッチさせるには、次のように記述します。

直前の文字xがn回繰り返されるとマッチするパターン
パターンを「/ax{3}b/」とした場合

●指定した回数以上の繰り返しを指定

 文字xがn回以上繰り返された場合にマッチさせるには、次のように記述します。

直前の文字xがn回以上繰り返されるとマッチするパターン

 x{n,}は直前の文字である"X"がn回以上現れるものにマッチします。

パターンを「ax{3,}b」とした場合

●繰り返す回数の範囲を指定

 文字xがn回からm回の範囲内で繰り返された場合にマッチさせるには、次のように記述します。

直前の文字xがn回からm回の範囲内で繰り返されるとマッチするパターン
パターン「ax{3,5}b」とした場合

●複数の文字の繰り返しを指定する

 これまで見てきたメタ文字の「*」、「+」、「?」や繰り返しの回数を指定する{n}、{n,m}は、直前の1文字の繰り返しを指定しますが、複数の文字を繰り返しの対象にしたい場合は( )を使って文字をグループ化します。なお、()で文字列を指定した場合は、(サブマッチパターン)となり、サブマッチ文字列として扱われます。

複数の文字の繰り返しを指定する

 文字列の「Java」が1回以上繰り返された場合にマッチさせるには、次のように記述します。

「Java」が1回以上繰り返されるとマッチするパターン

 exec()メソッドは、パターン文字列がサブマッチ文字列を含んでいる場合は、サブマッチ文字列の結果も返してきます。

 本編でもお話ししましたが、パターン文字列にサブマッチ文字列が含まれる場合は、exec()メソッドは、次のように配列で結果を返してきます。

 このため、マッチした文字列だけを取り出したい場合は、「結果を格納した変数名[0]」のようにインデックスで0を指定して、配列の先頭の要素だけを取り出すようにします。

●複数の候補を持つパターン

 パターンマッチの対象となる文字列を複数指定し、どれか1つの文字列が出現した場合にマッチさせるには、次のように「|」(パイプライン)を使います。

パターンマッチの対象となる文字列を複数指定する

 「co.jp」または「com」のいずれかにマッチさせるには、次のように記述します。

「co.jp」または「com」のいずれかにマッチさせるパターン

●()を使った簡略表記

 「xxxx.co.jp」と「xxxx.com」のいずれかにマッチさせたい場合は、次のように記述することができます。

()を使った簡略表記

●候補の出現回数を指定する

 複数の候補を設定する場合、量指定子の「+」や「*」を付けて繰り返し出現するパターンを指定することができます。

量指定子で繰り返しを指定する
パターンを「x(123|abc)*z」とした場合

 ( )を使うとサブマッチ文字列になりますので、マッチした文字列だけを取り出したい場合は、「結果を格納した変数名[0]」のようにインデックスで0を指定しましょう。

 なお、「*」を使った場合は、繰り返し回数が0でもマッチするので注意が必要です。

パターンを「(123|abc)*z」とした場合

●候補の文字列にメタ文字を組み合わせる

 候補として設定する文字列には、メタ文字を組み合わせることができます。次のパターンは、特定のメールアドレスにマッチします。

候補の文字列にメタ文字を組み合わせる

 上記のパターンは、次のいずれかの場合にマッチします。

  • 「user」のあとに任意の1文字が0回以上繰り返されたあとで@が出現する
  • 「member」のあとに任意の1文字が1回以上繰り返されたあとで@が出現する

●文字クラス

 パターンを定義する際に[abc]のように[]を付けると、[]内のいずれかの1文字とマッチするようになります。これを文字クラスと呼びます。文字クラスでは│を記述する必要がありません。

 「/100[2345]/」は「/100(2|3|4|5)/」と同じ効果があります。

パターンを「/100[2345]/」とした場合

●マッチする文字の範囲を指定する

 文字クラスを使用する場合、メタ文字の「-」を使うと、文字のaからzや数字の0から9のように、連続した文字を指定することができます。

●特定の範囲の数字を指定する

 [0123456789]の場合は、次のように記述することができます。

/[0-9]/

●アルファベットの範囲を指定する

 アルファベットの[hijklmn]の場合は、次のように記述することができます。

/[h-n]/

●文字と文字範囲を組み合わせる

 /[AE-NXYZ]/と記述した場合は、/[AEFGHIJKLMNXYZ]/と記載したことになります。

●複数の範囲を指定する

 次のように複数の範囲を指定することが可能です。この場合は、0から5、aからd、AからDのいずれかの範囲の文字が出現した場合にマッチします。

●文字クラスの否定

 文字クラスでは、メタ文字の「^」を先頭に記述することで、列挙した文字以外のすべての文字にマッチさせることも可能です。

 次のように記述した場合は、a、b、c以外のすべての文字にマッチします。

/[^abc]/

○定義済みの文字クラス

 使用頻度が高い文字クラスは、短縮形が用意されています。例えば、「\d」と記述した場合は[0-9]と同じ意味になります。

定義済みの文字クラス
定義済みの文字 文字 該当する文字クラス
\d 数字 [0-9]
\w 文字 [a-zA-Z0-9_]
\s 空白文字 [ \t\n\f\r]
\D 数字以外 [^\d]
\W 文字以外 [^\w]
\S 空白以外 [^\s]
[ \t\n\f\r] 空白、タブ(\t)、改行(\n)、用紙送り(\f)、キャリッジリターン(\r)の集合です。

書籍紹介

JavaScript Web開発パーフェクトマスター

JavaScript Web開発パーフェクトマスター

金城俊哉著
秀和システム 3,672円

JavaScriptは、Webアプリ開発の定番言語です。本書は、JavaScriptの初学者向けにWebアプリ開発に必要なノウハウを、ボトムアップ方式で基礎から応用までやさしく解説します。

若手プログラマーが講師となって、JavaScript未体験のエンジニアに手ほどきをするというペアプロ形式で説明していくので、プログラミングスクールで1対1のレッスンを受けている感覚で読み進めていただけます。開発現場ですぐに役立つ技が満載です!

注文ページへ


前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。