正規表現のオルタネーション

概要: このチュートリアルでは、正規表現における「OR」演算子であるJavaScript正規表現のオルタネーションについて学習します。

正規表現のオルタネーション入門

正規表現では、パイプ演算子(|)を使用してオルタネーションを表します。これは、正規表現における論理OR演算子のようなものです。オルタネーションを使用すると、AまたはBのいずれかを一致させることができます。

A | B

次の例では、オルタネーションを使用して、文字列'JavaScript and JS'内のJavaScriptまたはJSのいずれかに一致します。

const s = 'JavaScript and JS';
const pattern = /JavaScript|JS/g;
const match = s.match(pattern);

console.log(match);
Code language: JavaScript (javascript)

出力

[ 'JavaScript', 'JS' ]Code language: plaintext (plaintext)

正規表現オルタネーションの例

次の例では、正規表現オルタネーションの実用的なアプリケーションを示します。

1) hh:mm形式の時間文字列に一致させるための正規表現オルタネーションの使用

\d 文字セット量子化子{}を組み合わせた次の正規表現は、hh:mm形式の時間文字列に一致します。

/\d{2}:\d{2}/Code language: JavaScript (javascript)

この正規表現では

  • \d{2}は2桁の数字に一致します。
  • :はコロン文字に一致します。
  • \d{2}は2桁の数字に一致します。

しかし、ルール\d{2}は、例えば99のように無効な時間または分にも一致します。より正確に一致させるには、オルタネーションを使用できます。

有効な時間は01から23であるため、時間部分に一致させるには次のパターンを使用できます。

[01]\d|2[0-3]Code language: JavaScript (javascript)

このパターンでは

  • ルール[01]は、0または1という1桁の数字に一致します。ルール\dは、0から9までの1桁の数字に一致します。したがって、ルール[01]\dは00、01から19に一致します。
  • リテラル数値2は数字2に一致します。ルール[0-3]は、0、1、2、3を含む0から3までの1桁の数字に一致します。したがって、ルール2[0-3]は2桁の数値20、21、22、23に一致します。

したがって、ルール[01]\d|2[0-3]は00から23までの2桁の数値に一致します。

同様に、00から59までの有効な分に一致させるには、次のルールを使用できます。

[0-5]\dCode language: JavaScript (javascript)

次の正規表現は、これらのルールを組み合わせて、hh:mm形式の時間文字列に一致します。

/[01]\d|2[0-3]:[0-5]\d/gCode language: JavaScript (javascript)

しかし、この正規表現は期待通りには機能しません。例えば

const time = '05:30 31:62 23:45 26:99';
const pattern = /[01]\d|2[0-3]:[0-5]\d/g;
const match = time.match(pattern);

console.log(match);Code language: JavaScript (javascript)

出力

[ '05', '23:45' ]Code language: JavaScript (javascript)

この例では、正規表現エンジンはパターン[01]\d|2[0-3]:[0-5]\dを、オルタネーションで区切られた2つの部分として扱います。

[01]\d
OR
2[0-3]):([0-5]\d)Code language: Python (python)

これを修正するには、括弧を使用してオルタネーションを囲みます。これは、パターン全体ではなく、囲まれた部分のみがオルタネーションされることを示します。

([01]\d|2[0-3]):[0-5]\dCode language: JavaScript (javascript)

これで、スクリプトは期待通りに機能します。

const time = '05:30 31:62 23:45 26:99';
const pattern = /([01]\d|2[0-3]):[0-5]\d/g;
const match = time.match(pattern);

console.log(match);Code language: JavaScript (javascript)

出力

[ '05:30', '23:45' ]Code language: JavaScript (javascript)

まとめ

  • オルタネーションA | BAまたはBのいずれかに一致します。
  • オルタネーションは、正規表現におけるOR演算子のようなものです。
  • 括弧()を使用して、オルタネーションを適用する部分を囲みます。
このチュートリアルは役に立ちましたか?