読み込み中...

JavaScriptのmatchesを活用したプログラミング手法6選

JavaScriptにおけるmatchesメソッドの使い方と実践的なプログラミング手法を解説 JS
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●matchesメソッドとは?

プログラミングをしていると、文字列の中から特定のパターンにマッチする部分を探したいことがありますよね。

例えば、ユーザーが入力したメールアドレスが正しい形式かどうかを確認したり、URLから特定の情報を抽出したりする場面です。

こうした文字列のパターンマッチングを行うために、JavaScriptではmatchesメソッドが用意されています。

そもそもmatchesメソッドって何なのでしょうか?

簡単に言うと、正規表現を使って文字列のパターンマッチングを行うためのメソッドなんです。

正規表現というのは、文字列のパターンを表現するための特殊な記法のことで、一見するとちょっと難しそうに見えるかもしれません。

でも、matchesメソッドを使いこなせば、そんな正規表現も怖くありません。

○正規表現を使った文字列マッチング

正規表現を使った文字列マッチングは、一見すると複雑そうに見えますが、基本的なルールを理解すれば、それほど難しくありません。

正規表現では、特殊な記号を使ってパターンを表現します。

例えば、「.」は任意の一文字を表し、「*」は直前の文字の0回以上の繰り返しを表します。

また、「[」と「]」で文字の集合を表現することもできます。

これらの特殊な記号を組み合わせることで、様々な文字列のパターンを表現することができるんです。

例えば、「[a-z]+」は、小文字のアルファベットが1文字以上連続することを表します。

こうした正規表現を使って、文字列のパターンマッチングを行うのがmatchesメソッドなんですね。

○サンプルコード1:基本的な matches の使い方

それでは、実際にmatchesメソッドを使ってみましょう。

次のようなコードを見てみましょう。

const str = "Hello, World!";
const regex = /Hello/;
console.log(str.matches(regex)); // true

ここでは、”Hello, World!”という文字列に対して、「/Hello/」という正規表現パターンを使ってマッチングを行っています。

この正規表現は、文字列の中に「Hello」という文字列が含まれているかどうかを調べるためのものです。

実行結果を見てみると、「true」が出力されていますね。

これは、”Hello, World!”という文字列の中に、「Hello」という文字列が含まれているからです。

つまり、正規表現のパターンにマッチしたということになります。

○サンプルコード2:大文字小文字を区別しないマッチング

先ほどの例では、正規表現で「Hello」という文字列を指定していました。

しかし、これでは大文字小文字が厳密に一致しないとマッチしません。

例えば、「hello」という小文字の文字列では、マッチしないんです。

でも、大文字小文字を区別せずにマッチングしたいこともありますよね。

そんな時は、正規表現で「i」というフラグを使います。

次のようなコードを見てみましょう。

const str = "Hello, World!";
const regex = /hello/i;
console.log(str.matches(regex)); // true

ここでは、正規表現を「/hello/i」としています。

最後の「i」が、大文字小文字を区別しないことを表すフラグなんです。

実行結果を見ると、「true」が出力されていますね。

つまり、大文字の「Hello」という文字列に対して、小文字の「hello」という正規表現パターンでもマッチしているということです。

●matchesメソッドの戻り値

さて、ここまでmatchesメソッドの基本的な使い方について見てきましたが、matchesメソッドを使う上で欠かせないのが、その戻り値についての理解です。

どんな値が返ってくるのか、どうやってその値を活用するのか、しっかりと把握しておくことが大切ですよね。

プログラミングにおいて、メソッドの戻り値を理解することは非常に重要です。

メソッドがどんな結果を返すのかを知らないと、その結果を適切に処理することができません。

matchesメソッドの場合、戻り値を使ってマッチングの結果に応じた処理を行うことが多いので、戻り値の扱い方をマスターすることが欠かせません。

○真偽値としての戻り値

matchesメソッドの戻り値は、真偽値(Boolean)です。

マッチングに成功した場合はtrue、失敗した場合はfalseが返ってきます。

この真偽値を使って、マッチングの結果に応じた処理を行うことができるんです。

例えば、ユーザーが入力した文字列が特定のパターンに一致しているかどうかを判定し、一致していれば「OK」、一致していなければ「NG」というメッセージを表示するとしましょう。

このような場合、matchesメソッドの戻り値を使って条件分岐を行うことができます。

○サンプルコード3:if文でのmatchesの戻り値の活用

では、実際にmatchesメソッドの戻り値を使ったサンプルコードを見てみましょう。

const inputValue = "abc123";
const pattern = /^[a-zA-Z]+$/;

if (inputValue.matches(pattern)) {
  console.log("OK: 入力値は半角英字のみです");
} else {
  console.log("NG: 入力値に半角英字以外の文字が含まれています");
}

このコードでは、inputValueという変数に文字列が格納されています。

そして、patternという正規表現パターンを使って、その文字列が半角英字のみで構成されているかどうかを判定しています。

if文の中で、inputValue.matches(pattern)という条件式を使っています。

これは、inputValueの文字列がpatternの正規表現パターンにマッチするかどうかを判定しているんです。

マッチすればtrue、マッチしなければfalseが返ってきます。

この真偽値に応じて、if文の中の処理が実行されます。

マッチした場合は「OK: 入力値は半角英字のみです」というメッセージが、マッチしなかった場合は「NG: 入力値に半角英字以外の文字が含まれています」というメッセージがコンソールに出力されます。

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

NG: 入力値に半角英字以外の文字が含まれています

inputValueには「abc123」という文字列が格納されていますが、これは半角英字と数字が混在しているため、patternの正規表現パターンにはマッチしません。

そのため、else節の処理が実行され、「NG」のメッセージが出力されるわけです。

○サンプルコード4:三項演算子でのmatchesの戻り値の活用

if文を使った条件分岐は非常によく使われるのですが、もう少し簡潔に書く方法もあります。

それが三項演算子です。

三項演算子は、条件式とその結果を1行で表現することができる便利な演算子なんですね。

先ほどのif文を三項演算子を使って書き換えてみましょう。

const inputValue = "abc123";
const pattern = /^[a-zA-Z]+$/;

const message = inputValue.matches(pattern) ? "OK: 入力値は半角英字のみです" : "NG: 入力値に半角英字以外の文字が含まれています";
console.log(message);

三項演算子は、「条件式 ? 真の場合の値 : 偽の場合の値」という形式で記述します。

ここでは、inputValue.matches(pattern)が条件式になっていて、これがtrueならば、「OK: 入力値は半角英字のみです」という文字列が、falseならば、「NG: 入力値に半角英字以外の文字が含まれています」という文字列が、messageという変数に代入されます。

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

NG: 入力値に半角英字以外の文字が含まれています

if文を使った場合と同じ結果が得られていますね。

このように、三項演算子を使えば、条件分岐をより簡潔に書くことができます。

●複数条件でのマッチング

ここまでは、単一の正規表現パターンを使ったマッチングについて見てきましたが、実際のプログラミングでは、もう少し複雑な条件でマッチングを行いたいこともありますよね。

例えば、「半角英字か半角数字のみで構成された文字列」とか、「特定の文字列を含むが、別の文字列は含まない」といった具合です。

こんな時は、正規表現の中で複数の条件を組み合わせることができます。

正規表現には、論理和や論理積、否定といった論理演算を表現する方法があるんです。

これらを使いこなすことで、より柔軟性の高いマッチングが可能になります。

○論理和を使った複数条件マッチング

論理和は、「AまたはB」という条件を表現するための論理演算です。

正規表現では、「|」(パイプ記号)を使って論理和を表現します。

例えば、「cat|dog」という正規表現は、「cat」または「dog」という文字列にマッチするんですね。

論理和を使えば、複数のパターンのいずれかにマッチする文字列を探すことができます。

例えば、「半角英字か半角数字のみで構成された文字列」というのは、「[a-zA-Z]|[0-9]」という正規表現で表現できるんです。

○サンプルコード5:正規表現での論理和の使用例

では、実際に論理和を使ったサンプルコードを見てみましょう。

const str1 = "Hello";
const str2 = "123";
const str3 = "Hello123";
const pattern = /^([a-zA-Z]|[0-9])+$/;

console.log(str1.matches(pattern)); // true
console.log(str2.matches(pattern)); // true
console.log(str3.matches(pattern)); // false

このコードでは、patternという正規表現パターンを使って、文字列が「半角英字か半角数字のみで構成されているか」をチェックしています。

正規表現パターンの「^」は、文字列の先頭を表し、「$」は文字列の末尾を表します。

そして、「([a-zA-Z]|[0-9])」は、「半角英字か半角数字のいずれか1文字」を表しています。

これに「+」を付けることで、「1文字以上の繰り返し」を表現しているんですね。

実行結果を見てみると、str1とstr2はpatternにマッチしていますが、str3はマッチしていません。

これは、str1とstr2は半角英字か半角数字のみで構成されているのに対し、str3は半角英字と半角数字が混在しているためです。

このように、論理和を使えば、複数の条件のいずれかにマッチする文字列を柔軟にチェックすることができるんです。

○サンプルコード6:文字クラスを使った複数条件マッチング

論理和と似たような機能として、文字クラスというものもあります。

文字クラスは、「[]」で複数の文字をグループ化し、そのグループ内のいずれかの文字にマッチするという意味になります。

先ほどの例では、「[a-zA-Z]|[0-9]」と記述していましたが、これは「[a-zA-Z0-9]」と同じ意味なんです。

文字クラスを使えば、正規表現をよりコンパクトに記述することができます。

const str1 = "Hello";
const str2 = "123";
const str3 = "Hello123";
const pattern = /^[a-zA-Z0-9]+$/;

console.log(str1.matches(pattern)); // true
console.log(str2.matches(pattern)); // true
console.log(str3.matches(pattern)); // false

実行結果は先ほどと同じですが、正規表現パターンがよりシンプルになっていることがわかりますね。

文字クラスの中では、「-」を使って文字の範囲を表現することもできます。

例えば、「[a-z]」は小文字のアルファベット、「[A-Z]」は大文字のアルファベット、「[0-9]」は数字を表します。

これを組み合わせることで、より複雑な条件を表現することができます。

●よくあるエラーと対処法

正規表現を使ったマッチングは非常に強力な機能ですが、時として思わぬエラーに遭遇することがあります。

特に、正規表現の記述方法に慣れていない初心者の方は、エラーが発生した際に戸惑ってしまうことも多いのではないでしょうか。

マッチングがうまくいかない、予期せぬ結果になる、エラーメッセージが表示されるなど、正規表現を使っていると様々な問題に直面します。

でも、落ち着いて原因を探っていけば、必ず解決策が見つかるはずです。

ここでは、正規表現を使ったマッチングでよく遭遇するエラーと、その対処法について見ていきましょう。

これらのエラーを理解し、適切に対処できるようになれば、正規表現を使いこなすことができるようになるはずです。

○正規表現のシンタックスエラー

正規表現を記述する際に、誤った構文を使ってしまうと、シンタックスエラーが発生します。

例えば、「/」の数が合っていない、特殊文字をエスケープしていない、括弧の対応が取れていないなどの間違いです。

シンタックスエラーが発生すると、JavaScriptのコードが実行できなくなってしまいます。

エラーメッセージを見ると、「SyntaxError: Invalid regular expression」などと表示されるでしょう。

シンタックスエラーを防ぐためには、正規表現の構文をしっかりと理解し、注意深く記述することが大切です。

特殊文字を使う場合は、必ずエスケープを忘れずに。

括弧の対応にも気を付けましょう。

もし、シンタックスエラーが発生してしまったら、エラーメッセージを手がかりに、正規表現のどの部分に問題があるのかを特定します。

そして、正しい構文で書き直すことで、エラーを解消することができます。

○文字列と正規表現オブジェクトの混同

正規表現を使ったマッチングを行う際、文字列と正規表現オブジェクトを混同してしまうことがあります。

正規表現を表す方法には、「/パターン/」のようにスラッシュで囲む方法と、「new RegExp(‘パターン’)」のようにRegExpオブジェクトを使う方法がありますが、この2つを混同してしまうと、思わぬエラーが発生します。

例えば、次のようなコードを見てみましょう。

const str = "Hello, World!";
const pattern = "/Hello/";
console.log(str.matches(pattern)); // TypeError: str.matches is not a function

ここでは、正規表現パターンを表す変数patternに、文字列「”/Hello/”」を代入しています。しかし、これは正規表現オブジェクトではなく、単なる文字列なんです。

そのため、matchesメソッドを呼び出すと、「str.matches is not a function」というTypeErrorが発生してしまいます。

この問題を解決するには、正規表現オブジェクトを正しく作成する必要があります。

先ほどのコードを次のように修正してみましょう。

const str = "Hello, World!";
const pattern = /Hello/;
console.log(str.matches(pattern)); // true

patternを「/Hello/」のように記述することで、正しい正規表現オブジェクトを作成することができました。

こうすることで、エラーが解消され、正しくマッチングが行われるようになります。

文字列と正規表現オブジェクトの違いをしっかりと理解し、正しく使い分けることが大切ですね。

○nullやundefinedに対するmatchesメソッドの呼び出し

matchesメソッドは、文字列に対して呼び出すメソッドです。

しかし、nullやundefinedといった値に対してmatchesメソッドを呼び出すと、エラーが発生してしまいます。

例えば、次のようなコードを見てみましょう。

const str = null;
const pattern = /Hello/;
console.log(str.matches(pattern)); // TypeError: Cannot read property 'matches' of null

ここでは、変数strにnullを代入しています。

そして、そのstrに対してmatchesメソッドを呼び出そうとしているのですが、これは正しくありません。

nullに対してmatchesメソッドを呼び出すことはできないため、「Cannot read property ‘matches’ of null」というTypeErrorが発生してしまうんです。

この問題を回避するためには、matchesメソッドを呼び出す前に、対象の値がnullやundefinedではないかをチェックする必要があります。

次のように、if文を使って事前にチェックを行うと良いでしょう。

const str = null;
const pattern = /Hello/;

if (str !== null && str !== undefined) {
  console.log(str.matches(pattern));
} else {
  console.log("文字列ではありません");
}

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

文字列ではありません

strがnullやundefinedではない場合にのみ、matchesメソッドを呼び出すようにすることで、エラーを回避することができました。

まとめ

JavaScriptのmatchesメソッドは、正規表現を使った強力な文字列マッチングを実現するための重要なツールです。

基本的な使い方から、大文字小文字の区別、複数条件でのマッチングまで、様々な場面で活躍してくれます。

マッチングの成功・失敗を表す真偽値の活用方法や、よくあるエラーへの対処法についても理解を深めることができましたね。

正規表現の力をborrowedしながら、JavaScriptでの文字列処理の新たな扉を開いていきましょう。