JavaScriptの正規表現のよくあるエラーとその対処法
先生と生徒の会話形式で理解しよう
生徒
「JavaScriptで正規表現を使ったらエラーが出ることがあります。どうしてですか?」
先生
「正規表現には独特の記号や構文があります。小さな間違いでもエラーになりやすいんです。今日はよくあるエラーとその対処法を紹介します。」
生徒
「具体的にはどんなエラーがありますか?」
先生
「代表的なものを順番に見ていきましょう。」
1. スラッシュの使い方を間違えるエラー
JavaScriptの正規表現は、スラッシュ / で囲む必要があります。これを忘れると構文エラーになります。
// エラーになる例
const regex = "abc/"; // SyntaxError
// 正しい書き方
const regex2 = /abc/;
console.log(regex2.test("abcdef")); // true
文字列として書く場合は、RegExpコンストラクタを使うとスラッシュなしで書けます。
2. エスケープ文字の間違い
正規表現で特別な意味を持つ記号(.、*、+など)は、文字として使うときにバックスラッシュ \ でエスケープする必要があります。
// 間違い例
const regex = /a.b/; // 任意の1文字が入る意味になる
// 正しい例(ドットを文字として扱う)
const regex2 = /a\.b/;
console.log(regex2.test("a.b")); // true
console.log(regex2.test("acb")); // false
特殊文字をそのまま使うと予期しないマッチになるので注意が必要です。
3. グループ化の括弧の対応ミス
括弧 () で文字列をグループ化するときに閉じ括弧が足りないとエラーになります。
// 間違い例
const regex = /(abc/; // SyntaxError
// 正しい例
const regex2 = /(abc)/;
console.log(regex2.test("abc")); // true
開く括弧と閉じる括弧の数を確認する習慣をつけましょう。
4. 不正な文字クラス
文字クラス [] の中で範囲を間違えるとエラーになります。
// 間違い例
const regex = /[z-a]/; // 意味不明
// 正しい例
const regex2 = /[a-z]/;
console.log(regex2.test("m")); // true
文字クラスの範囲は昇順で指定する必要があります。
5. フラグの誤用
正規表現の後に付けるフラグ g、i、m などを間違えると無効になります。
// 間違い例
const regex = /abc/x; // SyntaxError: 無効なフラグ
// 正しい例
const regex2 = /abc/i;
console.log(regex2.test("ABC")); // true
使用できるフラグは g(全体検索)、i(大文字小文字区別なし)、m(複数行検索)などです。
6. 文字列から動的に正規表現を作る場合の注意
ユーザー入力などから正規表現を作るときは、特殊文字をエスケープしないと意図しない動作やエラーになります。
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
const userInput = "a+b";
const regex = new RegExp(escapeRegExp(userInput));
console.log(regex.test("a+b")); // true
これでユーザー入力を安全に正規表現に変換できます。
7. エラー回避の基本ポイント
- スラッシュや括弧、角括弧の対応を必ず確認する
- 特殊文字はエスケープする
- フラグの種類と意味を理解して使う
- 動的に作る場合はユーザー入力を安全にエスケープする
- テスト環境で小さな例を作って確認しながら進める
正規表現は便利ですが、些細なミスでエラーが出ることが多いです。焦らず確認しながら書くことが重要です。