`RegExp` オブジェクト

`RegExp` オブジェクト

この記事ではRegExp オブジェクトについて説明します。

RegExp オブジェクトについて実際的なサンプルを含めて解説します。

YouTube Video

RegExp オブジェクト

RegExp とは何か

RegExp(Regular Expression)は、文字列のパターンを表現するためのオブジェクトです。単なる文字比較とは異なり、「条件を満たす文字列」を柔軟に定義できます。

RegExp オブジェクトを使うと、文字列の検索・検証・抽出・置換といった処理を、短く明確に記述できます。フォーム入力のチェックやログ解析、テキスト整形など、日常的な処理で大きな力を発揮します。以下は、簡単な正規表現の例です。

1const pattern = /abc/;
  • この正規表現は、「abc という並びが含まれているか」を表します。

正規表現の作り方(2つの方法)

RegExp には リテラル表記コンストラクタ表記の 2 種類があります。

1// Literal notation: pattern and flags are written together
2const literal         = /hello/;
3const literalWithFlag = /hello/i;
4const literalDigits   = /\d+/;
5
6// Constructor notation: pattern and flags are passed separately
7const constructor         = new RegExp("hello");
8const constructorWithFlag = new RegExp("hello", "i");
9const constructorDigits   = new RegExp("\\d+");
  • リテラル表記は 簡潔で読みやすく、定数として扱う正規表現に向いています。一方、コンストラクタ表記は 変数を使ってパターンを組み立てたい場合や、実行時に内容が決まる場合に使用します。
  • リテラル表記では、正規表現とフラグを一体として直感的に記述できます。一方、コンストラクタ表記では、パターンとフラグを別々に指定する必要があります。
  • また、コンストラクタ表記では、正規表現を 文字列として渡すため、バックスラッシュを二重にエスケープする必要があります。

test():最も基本的な判定

RegExp オブジェクトには、正規表現を使った判定や処理を行うためのメソッドが用意されています。test() は、パターンに一致するかどうかを真偽値で返すメソッドです。

1const regex = /JavaScript/;
2
3console.log(regex.test("I love JavaScript")); // true
4console.log(regex.test("I love TypeScript")); // false
  • 条件分岐や入力チェックに最適な、最初に覚えるべきメソッドです。

match():一致した結果を取得する

match() は、一致した文字列や詳細情報を配列で返します

1const text = "Version 1.2.3";
2const result = text.match(/\d+\.\d+\.\d+/);
3
4console.log(result[0]); // "1.2.3"
  • 抽出処理やパース処理では、test() より match() が便利です。

replace():正規表現による置換

replace() は、一致部分を別の文字列に変換します。

1const text = "Hello   World";
2const result = text.replace(/\s+/g, " ");
3
4console.log(result); // "Hello World"
  • ログ整形や不要な空白の正規化などで利用できます。

フラグの基本(g, i, m)

正規表現には「フラグ」を指定できます。フラグは、正規表現がどのようなルールで文字列を処理するかを制御するオプションです。同じパターンでも、フラグの有無によって結果が変わります。

1const text = "apple Apple APPLE";
2const regex = /apple/gi;        // or new RegExp("apple", "gi");
3
4console.log(text.match(regex)); // ["apple", "Apple", "APPLE"]
  • g(global)は文字列全体を対象に検索します。
  • i(ignore case)は大文字・小文字の違いを無視して一致を判定します。
1const multilineText = `apple
2banana
3apple`;
4
5const regexM = /^apple/gm;
6
7console.log(multilineText.match(regexM)); // ["apple", "apple"]
  • m(multiline)は、複数行の文字列を行単位で扱うためのフラグです。^$ が、文字列全体ではなく「各行の先頭や末尾」を基準に動作するようになります。

文字クラス:複数の候補をまとめる

角括弧[] を使うと、1 文字分の選択肢を定義できます。

1const regex = /gr[ae]y/;
2
3console.log(regex.test("gray")); // true
4console.log(regex.test("grey")); // true
  • スペル違いや簡易バリエーションの吸収に便利です。

メタ文字:よく使うショートカット

メタ文字は、よく使われるパターンを短く書くための記号です。

1const regex = /\d{4}-\d{2}-\d{2}/;  // or new RegExp("\\d{4}-\\d{2}-\\d{2}");
2
3console.log(regex.test("2025-12-29")); // true
  • \d は数字、{n} は回数指定を意味します。

^ と $:文字列全体を検証する

^$ は、文字列の開始と終了を表します

1const regex = /^\d+$/;
2
3console.log(regex.test("123"));   // true
4console.log(regex.test("123a"));  // false
  • フォーム入力など、「完全一致」が必要な場面で重要です。

グループ化とキャプチャ

丸括弧 () を使うと、部分的に値を取り出すことができます。

1const text = "2025/12/29";
2const regex = /(\d{4})\/(\d{2})\/(\d{2})/;
3const [, year, month, day] = text.match(regex);
4
5console.log(year, month, day); // 2025 12 29
  • 日付や構造化された文字列の分解に非常によく使われます。

よくある失敗と注意点

正規表現は強力ですが、読みづらくなりやすいという欠点があります。

1// Hard to read
2const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$/;
  • 複雑になったら、コメントや分割、あるいは処理自体の見直しなどを検討できます。

まとめ

RegExp は、文字列処理を簡潔かつ正確に記述するための、JavaScript の重要な基盤機能です。最初から複雑な正規表現を覚える必要はなく、testmatchreplace といった基本的なメソッドと構文を、実際の用途に合わせて使っていくことが重要です。正規表現を「特別な知識」ではなく「整理されたパターン表現の道具」として扱えるようになると、入力検証やテキスト処理の品質と可読性は大きく向上します。

YouTubeチャンネルでは、Visual Studio Codeを用いて上記の記事を見ながら確認できます。 ぜひYouTubeチャンネルもご覧ください。

YouTube Video