Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

正規せいき表現ひょうげん

プログラミングを勉強していると必ず出会う、魔法まほうの言葉のような記号の羅列られつ。それが「正規せいき表現ひょうげん」です。英語で “Regular Expression” と言います。

JavaScriptでは、RegExp(レグエクスプ) オブジェクトを使います。

RegExpは 魔法まほうの虫めがね」 です。たくさんの文字の中から、自分の探したい「パターン」だけをピカッと光らせて見つけることができます。


I. 「正規せいき表現ひょうげん」ってなに?

普通の検索けんさくindexOf など)は、「特定の言葉」を探します。 RegExpは、「言葉のルール(パターン)」 を探します。

  • 普通の検索けんさく 「『田中』さんを探して」
  • RegExp: 「『数字が3つ、ハイフン、数字が4つ』の形(電話番号)を探して」

このように、あやふやなルールで検索けんさくできるのがすごいところです。


II. RegExpオブジェクトの作り方

2つのかたがありますが、よく使われるのは / /(スラッシュ) で囲む方法です。

// 1. スラッシュで囲む(リテラル) ★おすすめ
const pattern1 = /abc/;

// 2. new を使う
const pattern2 = new RegExp("abc");


III. よく使う「魔法まほうの記号」(1)

正規せいき表現ひょうげん(RegExp)のメタ文字は、文字の 「種類」「数」 を指定する特別なルールです。 「トランプのジョーカー」「算数のルール」たとえて説明すると、パズルのように楽しく理解できます。

よく使われる7つの記号を、やさしく解説しましょう!


1. . (ドット)

→「なんでもいい一文字」

  • イメージ: トランプの「ジョーカー」や、クイズの「穴埋(あなう)め」です。
  • ルール: 数字でも、漢字でも、アルファベットでも、**「とにかく1文字」**あればOK。

れい /あ.い/

  • 「あい」 … OK
  • 「あい」 … OK
  • 「あ1い」 … OK
  • 「あい」 … NG(文字が足りない)

2. * (アスタリスク)

→「0回以上のくり返し」

  • イメージ: おかわり自由。「なくてもいいし、無限(むげん)にあってもいい」
  • ルール: 直前(ちょくぜん)の文字が「0個、1個、2個……」と、いくつ続いていてもOK。

れい /あ*い/

  • 「い」 … OK(「あ」が0個でもいい)
  • 「あい」 … OK
  • 「あああい」 … OK

3. + (プラス)

→「1回以上のくり返し」

  • イメージ: 最低(さいてい)でも1つは必要。「1個以上なら、いくつでもいい」
  • ルール: 直前の文字が「1個、2個、3個……」と続いていればOK。

れい /あ+い/

  • 「い」 … NG(「あ」が最低1つは必要!)
  • 「あい」 … OK
  • 「あああい」 … OK

4. ? (クエスチョン)

→「0回か 1回だけ」

  • イメージ: 「あってもなくてもいい(最大1つまで)」
  • ルール: 直前の文字が「ない」か「1個だけある」状態。

れい /あ?い/

  • 「い」 … OK
  • 「あい」 … OK
  • 「ああい」 … NG(2個以上はダメ)

5. ^(キャレット)

→「行がここから始まる」

  • イメージ: マラソンの「スタートライン」です。
  • ルール: その文字で文章が始まっていることをチェックします。

れい /^おはよう/

  • 「おはようございます」 … OK
  • 「みんな、おはよう」 … NG(「みんな」から始まっているから)

6. $ (ドル)

→「行の最後さいごがこれでおわる」

  • イメージ: マラソンの「ゴールテープ」です。
  • ルール: その文字で文章が終わっていることをチェックします。

れい /です$/

  • 「田中です」 … OK
  • 「田中ですよ」 … NG(「よ」で終わっているから)

7. | (パイプ・縦線)

→「または(OR)」

  • イメージ: レストランのメニュー。「A または B どちらか選んで」というルール。
  • ルール: 左側か右側、どちらかの文字があればOK。

れい /りんご|みかん/

  • 「りんご」 … OK
  • 「みかん」 … OK
  • 「バナナ」 … NG

覚え方のまとめテーブル

記号意味覚え方のヒント
.なんでも1文字何が入るかワクワクする「穴」
*0個以上おかわり自由(なくてもいい)
+1個以上必ず1つは持ってきて!
?0か1個オプション(あってもなくてもいい)
^始まり文の最初にあるスタートライン
$終わり文の最後にあるゴールテープ
|またはAかB、どちらか好きな方!

いかがでしょうか? 記号の「パワー」を知ると、短いコードで複雑なチェックができるようになります。


IV. よく使う「魔法まほうの記号」(2)

正規せいき表現ひょうげん(RegExp)のメタ文字、さらに便利なものを紹介します! 今回は、文字を 「グループ化」 したり、「回数を正確に指定」 したりする、少し高度なルールです。

「チーム作り」「回数の予約」たとえて説明ます。

1. () (かっこ)

→「チーム(グループ)を作る」

  • イメージ: 複数の文字をひとつにまとめて「1つのチーム」として扱います。
  • ルール: チームに対して、さっき勉強した *+ を使うことができます。

れい /(abc)+/

  • 「abc」 … OK
  • 「abcabcabc」 … OK(「abc」というチームが繰り返されている)
  • 「abcc」 … NG(チーム全員で繰り返さないとダメ)

2. [] (角かっこ)

→「この中のどれか1文字」

  • イメージ: 「この中(リスト)にある文字なら、誰でもいいよ」という メンバー名簿めいぼ です。
  • ルール: カッコの中に入っている文字のどれか1つに合えばOK。

れい /[ABC]くん/

  • 「Aくん」 … OK
  • 「Bくん」 … OK
  • 「Cくん」 … OK
  • 「Dくん」 … NG(名簿めいぼに名前がない)

3. {n} {n,} {n, m} (波かっこ)

→「回数を数字で指定する」

これらは +* よりも、もっと細かく 「何回か」 を予約する記号です。

{n} :ぴったり n回

  • れい /\d{3}/ (数字がぴったり3つ
  • 「123」はOK、「12」はNG。

{n,} :n回以上(いくらでも)

  • れい /\d{3,}/ (数字が3つ以上
  • 「123」も「12345」もOK。

{n, m} :n回から m回のあいだ

  • れい /\d{3,5}/ (数字が3つ、4つ、または5つ
  • 「1234」はOK、「123456」はNG。

4. \ (バックスラッシュ / 円マーク)

→「魔法まほうを消して、普通の文字に戻す」

  • イメージ: 「エスケープ(逃がす)」 といいます。特別な力を持っているメタ文字から、魔法まほうを取り上げます。
  • ルール: メタ文字の前に書くと、ただの「記号」として探せるようになります。

れい 普通のドット(.)を探したいとき

  • . だけだと「なんでも1文字」という魔法まほうが発動します。
  • /\./ と書くと、文章の中にある**「点(ドット)」**そのものを探せます。

まとめテーブル(留学生向け)

記号意味覚え方のヒント
( )グループ化「みんなで1つのチームだよ!」
[ ]どれか1つ「このリストの中の誰か1人!」
{n}ぴったり n回「回数を予約(よやく)する」
{n, m}n回〜m回「最小と最大を決める」
\エスケープ魔法まほうをキャンセル!」

いかがでしょうか?これで正規せいき表現ひょうげんの主要なパーツがそろいました。


参考: かっこの種類と日本語の呼び方

留学生へのアドバイス

RegExpは、最初はむずかしくて「暗号あんごう」に見えます。でも、全部覚える必要はありません!

「RegExpは 『文字の形をチェックするルールブック』 だよ。 郵便番号、メールアドレス、パスワードの強さ(英数字えいすうじが入っているか)を調べるときに、世界中のプログラマーが使っているんだ。 むずかしいパターンは、インターネットで『RegExp 郵便番号』のように検索けんさくしてコピーすれば大丈夫だよ!」

Important

スラッシュ / / の後ろにつけるオプション(フラグ)

  • /abc/i :大文字と小文字を区別くべつしない(ignore)。
  • /abc/g全部ぜんぶ探す(global)。

この2つを知ると、さらに便利に使ってもらえます。

いかがでしょうか?「完璧かんぺきなパターンを自分で書く」ことよりも、「ルールで検索けんさくできる便利な道具がある」ことを知ることが第一歩いっぽです!


V. 実際に使ってみよう

よくある「メールアドレスの入力にゅうりょくチェック」のようなイメージです。

const myPattern = /apple/; // 「apple」という文字があるか?
const text = "I have an apple.";

// testメソッド:パターンに合っているかチェック(true / false)
if (myPattern.test(text)) {
  console.log("見つかりました!");
}

少しむずかしいパターンれい

「数字が3つ連続れんぞくしているところを探す」

const numPattern = /\d{3}/;
console.log(numPattern.test("abc123def")); // true

これまで学んだ「魔法まほうの記号(メタ文字)」をわせて、実際に使える 「郵便番号」「電話番号」 のパターンを作ってみましょう!

パズルをてるような感覚で見ていくと、楽しく覚えられます。

1. 「郵便番号」のパターン

日本の郵便番号は、「数字3つ + ハイフン + 数字4つ」 という形です。

正規せいき表現ひょうげん/^\d{3}-\d{4}$/

  • ^ : ここから始まる。
  • \d{3} : 数字(digit)が 3つ ぴったり。
  • - : ハイフンがある。
  • \d{4} : 数字が 4つ ぴったり。
  • $ : ここで終わる。

これを使うと: 「123-4567」は OK ですが、「123-456」や「1234-567」は NG になります。


2. 「電話番号」のパターン

日本の電話番号は、場所によって桁数けたすうが違いますが、一般的には 「数字2〜4個 + ハイフン + 数字2〜4個 + ハイフン + 数字4個」 という形が多いです。

正規せいき表現ひょうげん/^\d{2,4}-\d{2,4}-\d{4}$/

  • ^\d{2,4} : 最初の数字は 2つから4つの間
  • - : ハイフン。
  • \d{2,4}しんん中の数字も 2つから4つの間
  • - : ハイフン。
  • \d{4}$ : 最後は必ず 4つ で終わる。

これを使うと: 「03-1234-5678」も「090-1234-5678」も OK になります。


3. もっと自由に!「ハイフンがあってもなくてもいい」場合

留学生が「ハイフンを書かない人」もいるかもしれない、と考えたときは ? の出番です。

正規せいき表現ひょうげん/^\d{3}-?\d{4}$/

  • -? : ハイフンが 「0回か1回」。つまり、「あってもなくてもいいよ!」という意味です。

4. 覚え方のコツ

正規せいき表現ひょうげんは、左から右へ順番に読んでいくんだよ。 ^(入り口)から入って、\d(数字)の関所(せきしょ)をいくつか通って、最後は $(出口)にたどり着く。 途中でルールに合わない人が来たら、門前払い(もんぜんばらい)にするガードマンのようなものだよ!」

Tip

よく使う練習問題

  • /[0-9]/\d と同じ意味です。
  • [ ] を使うと、[0-9]{3} のように書くこともできます。

これで、バリエーションが広がります。


まとめテーブル:今回使ったパーツ

パーツ役割郵便番号での仕事
^はじまり最初の文字からチェック!
\d数字「1, 2, 3…」を探す
{n}ぴったりn回桁数を固定する
-そのままの文字ハイフンがあるか見る
$おわり余計な文字がないかチェック!

いかがでしょうか?これで「正しいデータだけを受け付ける」という、とても実践的(じっせんてき)なプログラムが作れるようになります。


VI. 実践的なれい その2

「正しいパスワードの形」をチェックするコードです。これまでの集大成しゅうたいせいとして、とても良い練習になります!

「パスワードの門番もんばん を作るイメージで説明します。

1. パスワードのルール(仕様)

今回は、よくあるこのようなルールをチェックします。

  1. 長さ: 8文字から16文字の間
  2. 文字: 英小文字(a-z)、数字(0-9)、特定の記号(@#!)が使える
  3. 最初: 必ず英小文字から始まる

2. パスワードチェックのコード

// パスワードの正規(せいき)表現(ひょうげん)(せいきひょうげん)
// 意味:最初は小文字、そのあとは英数字(えいすうじ)か記号が7〜15回続く(合計8〜16文字)
const passPattern = /^[a-z][a-z0-9@#!]{7,15}$/;

function checkPassword(pass) {
  if (passPattern.test(pass)) {
    console.log("✅ OK! 「" + pass + "」は正しいパスワードです。");
  } else {
    console.log("❌ NG! 「" + pass + "」はルールに合っていません。");
  }
}

// テストしてみましょう
checkPassword("mypass123");     // OK (英小文字から始まり、合計9文字)
checkPassword("a@#123456");     // OK (記号も使えます)
checkPassword("123password");   // NG (数字から始まっている)
checkPassword("abc");           // NG (短すぎる)
checkPassword("thisIsAVeryLongPassword"); // NG (長すぎる)

3. この「暗号」の読みとき方(解説)

左から順番に「門(もん)」を通過するイメージで考えてください。

  1. ^ : ここからチェック開始!
  2. [a-z] : 最初の1文字目は、**絶対に「英小文字」**じゃなきゃダメ。
  3. [a-z0-9@#!] : 2文字目からは、小文字・数字・記号のどれかを使ってね。
  4. {7,15} : 3番のルールを 7回から15回かえして ね。(最初の1文字を合わせると、全部で8〜16文字になります)
  5. $ : ここで終わり。これより後ろに余計な文字があったらダメ!

これで、郵便番号、電話番号、そしてパスワードのバリデーション(入力にゅうりょくチェック)ができるようになりましたね!

戻る