JavaScript 逆引き集 | 正規表現でマッチ

JavaScript JavaScript
スポンサーリンク
スポンサーリンク

「正規表現でパターンに当ててみる」という発想

s.match(/pattern/) は、文字列の中に「特定の形(パターン)」があるかどうかを調べるためのメソッドです。 ここでいう「パターン」を表現するのが正規表現(/pattern/)で、 天才プログラマー視点で言うと、「文字列の中から欲しいものだけを抜き出すための超強力なフィルター」です。

「ただの文字列検索」ではなく、 「こういう形をした文字だけ欲しい」という要求をコードで書けるのが正規表現+match の世界です。

基本イメージ:単純なパターンにマッチさせる

まずは、正規表現を「ちょっと賢い検索条件」くらいに捉えてみましょう。

const s = "My favorite language is JavaScript.";

const result = s.match(/JavaScript/);

console.log(result);
// ["JavaScript"]
JavaScript

/JavaScript/ というパターンに対して、 文字列 s の中から「JavaScript」という部分が見つかったので、 match は「マッチした部分を含む配列」を返します。

見つからなかった場合は null になります。

console.log(s.match(/Python/)); // null
JavaScript

この「見つかったら配列、見つからなかったら null」という挙動は、 match を使うときに必ず意識しておくべきポイントです。

正規表現のパターンを少しだけ深掘りする

正規表現は本気でやると沼ですが、 初心者向けに「よく使う入り口」だけ押さえておきましょう。

例えば、数字だけにマッチさせたい場合。

const s = "ID: 12345";

const result = s.match(/\d+/);

console.log(result);
// ["12345"]
JavaScript

ここでのポイントは、 /\d+/ が「1文字以上の数字」という意味になっていることです。

\d が「数字1文字」。 + が「1文字以上繰り返し」。

この組み合わせで、「連続した数字のかたまり」を抜き出せます。

メールアドレスっぽいものを抜き出す例

少しだけ複雑な例も見てみます。

const s = "Contact: aki@example.com";

const result = s.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i);

console.log(result);
// ["aki@example.com"]
JavaScript

ここでは、 「メールアドレスっぽい形」を正規表現で表現しています。

[a-z0-9._%+-]+ が「ローカル部(@ の前)」、 @ がそのままのアットマーク、 [a-z0-9.-]+ が「ドメイン名」、 \.[a-z]{2,} が「ドット+2文字以上のアルファベット(例: .com, .jp)」、 i フラグが「大文字小文字を区別しない」という指定です。

ここまで来ると「魔法陣」に見えるかもしれませんが、 「こういう形の文字だけ欲しい」という要求を、1本のパターンで書けるという感覚が大事です。

グローバルフラグ g の違いを理解する(ここ重要)

match は、正規表現に g フラグがあるかどうかで挙動が変わります。

フラグなしの場合(最初の1件+詳細情報)。

const s = "ID: 123, Code: 456";

const result = s.match(/\d+/);

console.log(result);
// ["123", index: 4, input: "ID: 123, Code: 456", ...]
JavaScript

最初にマッチした「123」だけが返り、 どこで見つかったかなどの情報も含まれます。

g フラグありの場合(全部のマッチを配列で)。

const s = "ID: 123, Code: 456";

const result = s.match(/\d+/g);

console.log(result);
// ["123", "456"]
JavaScript

この場合は、「マッチした部分だけを集めた配列」が返ります。 インデックス情報などは付きません。

初心者がよく混乱するので、 「1件だけ詳しく欲しいならフラグなし、全部欲しいなら g と覚えておくとスッキリします。

マッチ結果が null になることを前提に書く

match は、見つからなかったときに null を返します。 ここをちゃんと扱わないと、実行時エラーの原因になります。

const s = "No numbers here.";

const result = s.match(/\d+/);

if (result) {
  console.log("見つかった:", result[0]);
} else {
  console.log("数字は見つからなかった");
}
JavaScript

このように、 「まず result が null かどうかをチェックしてから、中身を使う」 という書き方を習慣にしておくと、安全に扱えます。

まとめ:s.match(/pattern/) は「文字列から欲しい形だけを抜き出すためのレンズ」

s.match(/pattern/) を使いこなせると、 文字列の中から「欲しい部分だけ」を抜き出す処理が一気に強くなります。

正規表現で「こういう形の文字だけ欲しい」を表現する。 マッチしたら配列、なければ null。 g フラグの有無で「1件だけ」か「全部」かが変わる。

「この文字列の中から、特定の形をした部分だけ取り出したい」と感じた瞬間に、 まず正規表現+match を思い出せるようになること。

それが、文字列処理を一段深いレベルで扱えるようになるための、大きな一歩になります。

タイトルとURLをコピーしました