では、次のステップとして 少し応用した初心者向けの正規表現演習問題セット を作り、ステップごとに解説します。
応用練習問題1:複数行文字列で「各行が数字だけ」かチェック
問題
- 複数行の文字列があり、各行が数字だけで構成されているかチェックする正規表現を書こう。
ステップ1:1行分の数字を表す
/^\d+$/ // 1行の数字
JavaScriptステップ2:複数行対応
mフラグ → 複数行モードで^と$が行頭・行末を指す
/^\d+$/m
JavaScriptステップ3:正規表現でチェック
let str = `123
456
789`;
let regexp = /^\d+$/gm; // g: 全てのマッチを取得, m: 複数行
console.log(str.match(regexp)); // ['123','456','789']
JavaScript解説
m→ 行ごとに先頭・末尾を判定g→ マッチしたすべての部分を取得- 各行が数字だけの場合、すべてマッチして配列で返される
応用練習問題2:文字列に数字とアルファベットが混ざっているかチェック
問題
- 入力が 英数字のみ(a-z, A-Z, 0-9) で構成されているか確認する正規表現を書こう。
ステップ1:英数字を表す
/[a-zA-Z0-9]/
JavaScriptステップ2:文字列全体でチェック
/^[a-zA-Z0-9]+$/
JavaScriptステップ3:正規表現でチェック
let regexp = /^[a-zA-Z0-9]+$/;
console.log(regexp.test("abc123")); // true
console.log(regexp.test("abc_123")); // false
console.log(regexp.test("123456")); // true
console.log(regexp.test("abc!")); // false
JavaScript解説
_や!など英数字以外が含まれるとfalse+→ 1文字以上繰り返す^と$→ 文字列全体を対象にする
応用練習問題3:URL形式かチェック(簡易版)
問題
- 「http:// または https://」で始まる簡易的なURLをチェックする正規表現を書こう。
ステップ1:プロトコル部分
/^https?:\/\//
JavaScripts?→ s はあってもなくてもよい\/→ スラッシュ/はエスケープ
ステップ2:ドメイン部分
/^https?:\/\/[a-zA-Z0-9.-]+/
JavaScript[a-zA-Z0-9.-]+→ 英数字、ドット、ハイフン1文字以上
ステップ3:文字列末尾までチェック
/^https?:\/\/[a-zA-Z0-9.-]+(\.[a-zA-Z]+)+$/
JavaScript(\.[a-zA-Z]+)+→ ドットと英字が1回以上繰り返される(例:.com.co.jp)
ステップ4:正規表現でチェック
let regexp = /^https?:\/\/[a-zA-Z0-9.-]+(\.[a-zA-Z]+)+$/;
console.log(regexp.test("http://example.com")); // true
console.log(regexp.test("https://sub.example.co.jp")); // true
console.log(regexp.test("ftp://example.com")); // false
console.log(regexp.test("http://example")); // false
JavaScript解説
httpまたはhttpsのみを許可- ドメイン名とトップレベルドメイン(.comなど)を最低1回は必須
- 複雑なURLチェックはさらに正規表現を拡張する必要がありますが、初心者向けの簡易版です。
応用練習問題4:ハイフンやスペースを含む名前かチェック
問題
- 氏名やユーザー名などで アルファベットとハイフン・スペースだけ で構成されているかチェックする正規表現を書こう。
ステップ1:文字の範囲を指定
/^[a-zA-Z -]+$/
JavaScript[a-zA-Z -]→ アルファベット、小文字・大文字、スペース、ハイフンを許可+→ 1文字以上繰り返す^と$→ 文字列全体を対象
ステップ2:正規表現でチェック
let regexp = /^[a-zA-Z -]+$/;
console.log(regexp.test("John Doe")); // true
console.log(regexp.test("Mary-Jane")); // true
console.log(regexp.test("Alice123")); // false
console.log(regexp.test("Bob_Lee")); // false
JavaScript解説
- スペースやハイフンは許可
- 数字やアンダースコア
_は許可されない
💡 応用ポイントまとめ
?→ 直前の文字があってもなくても良い()→ グループ化+→ 1回以上繰り返すm→ 複数行モード^と$→ 文字列全体または行全体を対象

