このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【JavaScript入門】正規表現を利用するメソッド

 正規表現 (Regular Expression, RegExp) は、文字列パターンを表現し検索・抽出・置換などを強力かつ簡潔に行うための仕組みです。
JavaScript では

  • RegExp オブジェクト … パターンそのものを保持し、検索用メソッドを提供
  • String オブジェクト … 文字列側から正規表現を受け取り、検索・置換などを実行

という二つの立場から API が用意されています。
 ここでは、両者の代表的メソッドを体系的に整理し、実用的な HTML + JavaScript サンプルを通して「実務でどう使うか」までを解説します。

1.RegExp オブジェクトのメソッド

メソッド戻り値主な用途g フラグ有無による違い
exec(s)一致情報を含む配列 / null詳細な一致情報が欲しいとき文字列 s の中で一致するものを検索する。一致するものがあれば最初の情報を格納した配列を、それ以外は null を返す。
g 無し: 常に先頭一致のみ
g 有り: .lastIndex を更新しながら次々取得。異なる文字列を調べる前に .lastIndex = 0 を忘れずに。
test(s)true / false存在確認・条件分岐文字列 s の中で一致するものがあれば true を、なければ false を返す。

1.1. exec().lastIndex

文字列の中で一致するものを検索する。

const re = /[A-C]級/i;      // 大文字小文字無視 + g
console.log(re.exec('B級です'));   // => ['B級', index: 0, input: 'B級です', groups: undefined]
console.log(re.exec('A級です'));   // => ['A級', index: 0, input: 'A級です', groups: undefined]

1.2 .test()

真偽値だけ欲しい場合に最速。フォーム入力バリデーションなど if 文と相性抜群です。

const urlRe = /^https?:\/\//i;
console.log(urlRe.test('https://example.com')); // true
console.log(urlRe.test('ftp://example.com'));   // false

2.String オブジェクトのメソッド

メソッド戻り値主な用途備考
match(r)配列 / null先頭一致 or g 付きで全一致詳細情報が欲しいときは RegExp を自作しない場合でも使える
matchAll(r)反復子 (Iterator)全一致をイテレータで走査r は必ず g フラグ付き
search(r)先頭位置 / -1位置検索最初の一致位置のみ
replace(r, s)パターンの 1 つ、いくつか、またはすべての一致を指定した置換で置き換えた新しい文字列置換後文字列置換
split(r)配列文字列分割区切り文字列として正規表現を使用

2.1. match()matchAll()

match()g 無しなら最初の一致のみ、g 有りなら全一致配列。matchAll() は常に全一致を返しつつ位置情報も保持した反復子を返すため、大量データを逐次処理する場合に便利です。

const text = '郵便番号:123-4567 と 987-6543 を検出';
console.log(text.match(/\d{3}-\d{4}/));     // g 無し → 1 件目のみ
for (const m of text.matchAll(/\d{3}-\d{4}/g)) {  // g 有り → 2 件
  console.log(m[0], '位置', m.index);
}

2.2. search()

「その単語がどこにある?」を知りたいときに最短。-1 判定で存在チェックも可能です。

2.3. replace()

第 2 引数が関数の場合、キャプチャ内容を基に自由に加工できます。

// 正規表現オブジェクトを作成
const re = /[!!]+/;

// .replace()の結果をコンソールに出力
console.log('助けて!!!!'.replace(re, '。'));  // 助けて。
console.log('助けて!!!!!'.replace(re, '。'));  // 助けて。

2.4. split()

文章を「読点・句点・助詞」など複数の区切りで分割したい場合に重宝します。

3.実践 HTML サンプル

メールアドレス抽出 & 強調表示

ファイル名: email_highlighter.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メールアドレス抽出デモ</title>
<style>
  mark { background: #ffeb3b; }
  body { font-family: sans-serif; line-height: 1.7; }
</style>
</head>
<body>
<p id="src">
  ご連絡は info@example.com または support@example.co.jp までお願いします。
</p>

<script>
(() => {
  // 抽出用正規表現(極簡易版)
  const mailRe = /[\w.-]+@[\w.-]+\.[A-Za-z]{2,}/g;

  // 対象文字列
  const p = document.getElementById('src');
  const original = p.textContent;

  // 抽出結果を配列で取得
  const mails = original.match(mailRe) || [];

  // 強調表示用に置換
  const highlighted = original.replace(mailRe, m => `<mark>${m}</mark>`);
  p.innerHTML = highlighted;

  // 結果をコンソールにも出力(学習用)
  console.log('抽出したメールアドレス:', mails);
})();
</script>
</body>
</html>

デバックコンソールの出力

抽出したメールアドレス: (2) ['info@example.com', 'support@example.co.jp']

ブラウザ表示

info@example.comsupport@example.co.jp が黄色マーカー付きで表示されます。

プログラム解説

  • 正規表現
    ・[\w.-]+ … ユーザー名部分 (英数・アンダースコア・ピリオド・ハイフン)
    ・@ … 区切り
    ・[\w.-]+ … ドメイン
    ・\.[A-Za-z]{2,} … TLD (トップレベルドメイン)
  • match() で全一致を配列取得し、replace()<mark> タグを挿入。
  • 日本語メッセージは console.log('抽出したメールアドレス:', mails); のように出力。

4.正規表現フラグと高度なテクニック

主要フラグ早見表

フラグ意味典型例
gglobal 検索すべての一致を取得
iignoreCase大文字小文字無視
mmultiline^ \$ を行頭行末に作用
sdotAll. が改行にもマッチ
uunicodeUnicode コードポイントを正しく扱う
ysticky.lastIndex 位置からのみ検索

まとめ

JavaScript の正規表現 API は

  1. RegExp メソッド … 低レベルかつ詳細情報 (exec, test)
  2. String メソッド … 文字列側から手軽に操作 (match, replace など)

の二系統を押さえることで自在に使い分けられます。
 まずは g / i フラグと match() / replace() を組み合わせ、日常的なログ解析やフォームバリデーションを作ってみると理解が深まります。