概要: このチュートリアルでは、正規表現における「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]\d
Code language: JavaScript (javascript)
次の正規表現は、これらのルールを組み合わせて、hh:mm
形式の時間文字列に一致します。
/[01]\d|2[0-3]:[0-5]\d/g
Code 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]\d
Code 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 | B
はA
またはB
のいずれかに一致します。 - オルタネーションは、正規表現におけるOR演算子のようなものです。
- 括弧
()
を使用して、オルタネーションを適用する部分を囲みます。