概要: このチュートリアルでは、X に一致するが、それに Y が続く場合にのみ一致する JavaScript regex lookahead について学習します。
JavaScript regex lookahead の概要
正規表現では、lookahead を使用すると、X に一致しますが、それに Y が続く場合にのみ一致します。
lookahead の構文は次のとおりです。
X(?=Y)Code language: JavaScript (javascript)この構文では、regex エンジンが X を検索し、その後に Y が続く場合にのみ一致します。
たとえば、次のような文字列があるとします。
const s = '1 car is 15 feet long';Code language: JavaScript (javascript)ここで、数字 15 の後にスペースと文字列リテラル feet が続き、数字 1 が続かないものに一致させたいとします。それには、正規表現で lookahead を使用できます。
/\d+(?=\s*feet)/Code language: JavaScript (javascript)この正規表現では
\d+は 1 桁以上の数字に一致します?=は lookahead 構文です\s*は 0 個以上の空白文字に一致しますfeetは文字列リテラルfeetに一致します
次のコードは、上記の式を使用して、0 個以上の空白文字と文字列リテラル feet の後に続く数字に一致します。
const s = '1 car is 15 feet long';
const pattern = /\d+(?=\s*feet)/;
const match = s.match(pattern);
console.log(match);Code language: JavaScript (javascript)出力
15Code language: PHP (php)Regex 複数の lookahead
正規表現内で次の構文を使用して、複数の lookahead を持つことができます。
X(?=Y)(?=Z)Code language: JavaScript (javascript)この構文では、regex エンジンは次の手順を実行します。
- X を検索します
- X の直後に Y があるかどうかを確認します。ない場合はスキップします。
- Y の直後に Z もあるかどうかを確認します。ない場合はスキップします。
- 両方のテストに合格した場合、X を一致として返します。それ以外の場合は、次の一致を検索します。
したがって、X(?=Y)(?=Z) は X と Y と Z が同時に続くものに一致します。
Regex ネガティブ lookahead
次の文字列で数字 1 に一致させたいが、数字 15 には一致させたくない場合があります。
const s = '1 car is 15 feet long';Code language: JavaScript (javascript)それには、ネガティブ lookahead を使用します。ネガティブ lookahead の構文は次のとおりです。
X(?!Y)Code language: JavaScript (javascript)この構文では、regex エンジンは X の後に Y が続かない場合にのみ X に一致します。
次の例は、ネガティブ lookahead の使い方を示しています。
const s = '1 car is 15 feet long';
const pattern = /\d+(?!\s*feet)/;
const match = s.match(pattern);
console.log(match);Code language: JavaScript (javascript)出力
1Code language: plaintext (plaintext)概要
- regex lookahead
X(?=Y)は、Xの後にYが続く場合にのみXに一致します。 - ネガティブ regex lookahead
X(?!Y)は、Xの後にYが続かない場合にのみXに一致します。
このチュートリアルは役に立ちましたか?