JavaScriptの正規表現で否定のパターンを表す方法を学ぼう
生徒
「正規表現で特定の文字だけを除外したい場合はどうすればいいですか?」
先生
「その場合は否定文字クラスを使います。文字クラスの中で ^ を使うと、『この文字以外』という意味になります。」
生徒
「例えばどのように書くんですか?」
先生
「例えば [^abc] と書くと、a、b、c 以外の文字にマッチします。」
1. 否定文字クラスとは?
正規表現では、角括弧 [ ] を使って文字の集合を表します。例えば [abc] は a、b、c のいずれかにマッチします。ここに ^ を先頭に置くと、「これ以外」という否定になります。
const text = "apple banana cherry";
const result = text.match(/[^abc]/g);
console.log(result);
// ["p", "p", "l", "e", " ", "n", "n", " ", "h", "e", "r", "r", "y"]
上記では a、b、c を除くすべての文字がマッチしています。
2. 否定文字クラスの応用例
数字以外の文字にマッチさせたい場合も否定文字クラスが使えます:
const text = "ID12345";
const result = text.match(/[^0-9]/g);
console.log(result); // ["I", "D"]
ここでは [^0-9] が数字以外の文字を抽出しています。
3. 特殊文字との組み合わせ
否定文字クラスは他の正規表現と組み合わせることで便利に使えます。例えば空白文字以外をすべて取り出す場合:
const text = "Hello World!";
const result = text.match(/[^\s]+/g);
console.log(result); // ["Hello", "World!"]
\\s は空白文字を表し、[^\s] で空白以外の文字にマッチさせています。
4. 否定文字クラスのポイント
- 角括弧
[ ]内で^を先頭に置くと否定になる - 数字、アルファベット、空白などを除外したいときに便利
- 他の正規表現と組み合わせて複雑なマッチ条件も作れる
否定パターンを使うことで、特定の文字を除外した検索や抽出が簡単にできるようになります。初心者の方はまず小さな文字列で練習してみると理解が進みます。
5. 否定パターンで特定の単語を除外する
否定文字クラスは文字単位での除外に使われますが、単語単位で除外したい場合は少し工夫が必要です。例えば特定の単語を含まない文字列を扱う場合、否定先読みと組み合わせることで対応できます。
const text = "apple orange banana";
const result = text.match(/(?!banana)\b\w+\b/g);
console.log(result); // ["apple", "orange"]
このように、単語レベルで条件を制御することで、より柔軟な検索が可能になります。
6. 否定先読みとの違いを理解する
否定文字クラスと似た概念に否定先読みがあります。否定先読みは特定のパターンに続かない場合のみマッチさせる方法です。文字単位ではなく条件全体を制御できる点が特徴です。
const text = "cat dog cow";
const result = text.match(/c(?!at)\w+/g);
console.log(result); // ["cow"]
この例では「cat」は除外され、「cow」のみが対象になります。用途に応じて使い分けることが重要です。
7. 否定パターンを使った入力チェック
否定パターンは入力チェックにもよく使われます。例えば英数字以外を除外したい場合などです。ユーザー入力の検証処理で活用できます。
const input = "abc123!@#";
const result = input.replace(/[^a-zA-Z0-9]/g, "");
console.log(result); // "abc123"
このように不要な文字を取り除くことで、安全で整ったデータを扱うことができます。フォーム入力やバリデーション処理で非常に役立つテクニックです。