正規表現で「〇〇だけ一致しない」問題を一撃で解決する方法

Sponsored Link

正規表現は、テキスト処理において非常に強力なツールですが、「特定の文字列だけを一致させない」という要件は、初心者にとっては難しい課題です。

この記事では、正規表現を使って特定の文字列を除外する方法を解説し、実際のサンプルコードを通じて理解を深めていきます。

1. 正規表現の基本を理解する

正規表現は、文字列のパターンを定義するための特別な文字列です。基本的な構文を理解することが、特定の文字列を除外するための第一歩です。以下は、正規表現の基本的な構成要素です。

  • リテラル: 文字そのものを表します。例えば、abcは「abc」という文字列に一致します。
  • メタキャラクター: 特別な意味を持つ文字です。例えば、.は任意の1文字に一致します。
  • 量指定子: 繰り返しの回数を指定します。例えば、*は0回以上、+は1回以上の繰り返しに一致します。

2. 特定の文字列を除外するための基本的なアプローチ

特定の文字列を一致させないためには、負の先読み(negative lookahead)を使用します。これは、特定のパターンが続かないことを確認するための構文です。

以下の例では、「cat」という単語を除外し、それ以外の単語を一致させる正規表現を示します。

const text = "The cat sat on the mat. The dog barked.";
const regex = /\b(?!cat\b)\w+\b/g;

const matches = text.match(regex);
console.log(matches); // ["The", "sat", "on", "the", "mat.", "The", "dog", "barked."]

このコードでは、(?!cat\b)が「cat」という単語が続かないことを確認し、他の単語を一致させています。

3. より複雑なケースへの対応

負の先読みを使うことで、特定の文字列を除外するだけでなく、複数の条件を組み合わせることも可能です。

例えば、「cat」と「dog」の両方を除外したい場合、以下のように記述します。

const text = "The cat sat on the mat. The dog barked.";
const regex = /\b(?!cat\b|dog\b)\w+\b/g;

const matches = text.match(regex);
console.log(matches); // ["The", "sat", "on", "the", "mat.", "barked."]

この例では、(?!cat\b|dog\b)を使って、「cat」と「dog」の両方を除外しています。

4. 特定の文字列が含まれる行を除外する

特定の文字列が含まれる行全体を除外したい場合、行の先頭に負の先読みを追加することができます。

以下の例では、「cat」を含む行を除外します。

const text = `The cat sat on the mat.
The dog barked.
The cat and dog played together.`;

const regex = /^(?!.*cat).+/gm;

const matches = text.match(regex);
console.log(matches); // ["The dog barked."]

このコードでは、^(?!.*cat)が「cat」を含まない行を一致させています。

5. 文字列の一部を除外する

特定の文字列の一部を除外したい場合、部分一致を考慮する必要があります。

例えば、「cat」を含む単語を除外したい場合、以下のように記述します。

const text = "The cat sat on the mat. The catapult launched.";
const regex = /\b(?!cat)\w+\b/g;

const matches = text.match(regex);
console.log(matches); // ["The", "sat", "on", "the", "mat.", "The", "catapult", "launched."]

この例では、「cat」を含む単語は除外されず、他の単語が一致します。

6. まとめ

正規表現を使って特定の文字列を除外する方法は、負の先読みを活用することで実現できます。この記事で紹介したテクニックを使うことで、特定の文字列を除外したり、複数の条件を組み合わせたりすることが可能です。正規表現は強力なツールですが、使い方を理解することで、より効果的に活用できるようになります。

参考

タイトルとURLをコピーしました