JavaScriptの技法:正規表現を学ぶ

文:Tony Patton(TechRepublic) 翻訳校正:原井彰弘
2008-01-11 07:00:00
  • このエントリーをはてなブックマークに追加

 データの妥当性検証は、ユーザからデータを受け取るウェブアプリケーションにとっては必須の機能だ。なぜなら、データの形式が正しいかどうかを、作業を行う前にまず確かめる必要があるからである。ウェブアプリケーションで妥当性の検証を行う際には、ASP.NETやJSPなどで利用可能なプラットフォーム固有の機能を使用するか、それともクライアントサイドでJavaScriptの機能を利用するかを選択することが可能だ。そして、ここでJavaScriptを選択した場合、正規表現を用いることによって検証作業を単純化できるようになる。

正規表現

 正規表現は一種のパターンマッチである。正規表現を用いるとテキストのパターンを簡単に表現することが可能になるため、正規表現はテキストデータの妥当性検証で大きな威力を発揮する。また、正規表現ではパターンマッチだけではなくテキストの置換を行うことも可能だ。私はかつてPerlを用いてUnixシステムで作業を行っていたときに初めて正規表現に出会ったが、その後正規表現のサポートは大幅に拡大された。

 メモ:もし他の開発者と多くの時間を共にしているなら、正規表現(Regular Expressions)をRegExやRegExpと呼んでいるのを聞いたことがあるかもしれない。どう呼ぼうが、強力ではある。と同時に、どう呼ぼうが正規表現の構文は少々難解であり、習得するのには少し時間がかかる。それでは、正規表現の基礎的な利用方法をさらに見てみよう。

基本的な構文

 正規表現の構文は複雑だ。正規表現のみについて書かれた本が複数存在する事実も、その難しさを物語っている。従って、本稿では正規表現を始めるに当たって必要となる少数の基礎的な要素のみを紹介する。

 基礎的な機能として「アンカー」が存在する。アンカーは文字列の始まりや終わりを指定するために利用されるもので、キャレット「^」は文字列の始まりを、ドルマーク「$」は文字列の終わりを示す。そのため、もし検索文字列の中にキャレットやドルマークを含めたい場合には、エスケープシーケンスを使用しなければならない。エスケープ文字はバックスラッシュ「\」で表され、キャレットやドルマークの手前に付加することでエスケープが行われるようになる。以下は「search」という語が文字列として単独で現れた場合にマッチする例である。

^search$

 また、角括弧(「[」と「]」)で文字の集合をくくると、それらを検索することが可能になる。文字集合とは、マッチした文字が属していなければならない文字の集まりのことだ。よい例を挙げると、数の範囲を検索したい場合、[12345]と記述することで1から5までの範囲の数にマッチする。ちなみに、この場合は[1-5]と記述することも可能だ。

 ところで、文字が複数回現れたり、文字の出現が任意であることを指定したいことはよくあるだろう。クエスチョンマーク「?」を用いると、その手前の文字は現れても現れなくてもよいことを表現できる。また、プラス「+」を用いると、その手前の文字が1回以上出現することを表現できる。さらに、アスタリスク「*」を用いれば、その手前の文字が0回以上出現することを表現できる。

 それでは、ここで簡単に学んだ正規表現の構文の基礎を、実際にJavaScriptで利用してみよう。

JavaScriptでのサポート

 正規表現はバージョン1.2のJavaScriptからサポートされた。Internet Explorer 4以上、Netscape 4以上、Firefoxのすべてのバージョン、そして多くの最近のウェブブラウザではサポートが行われている。正規表現は、JavaScriptの文字列もしくはRegExpオブジェクトを通して利用可能だ。

文字列で正規表現を用いる

 JavaScriptのすべての文字列変数では正規表現がサポートされている。正規表現はmatch()、replace()、search()という3つのメソッドを用いて利用可能であるほか、オブジェクトのtest()メソッドを用いるとテストが行える。以下に、match()、replace()、search()の各メソッドについてさらに詳しく紹介しよう。

  • 新着記事
  • 特集
  • ブログ