JavaScript の正規表現の Lookbehind(ルックビハインド)

If this JavaScript tutorial saves you hours of work, please whitelist it in your ad blocker 😭 and
to support us ❤️ in paying for web hosting and CDN to keep the site running.

概要: このチュートリアルでは、JavaScript の正規表現で X の前に Y がある場合に X にマッチさせる正規表現の Lookbehind(ルックビハインド)の使い方を学びます。

JavaScript の正規表現の Lookbehind(ルックビハインド)の概要

正規表現では、Lookbehind(ルックビハインド)は直前に別の特定の要素があれば要素に一致します。Lookbehind は次の構文があります。

(?<=Y)X

この構文では、直前に Y があればパターンには X と一致します。

例えば、次の文字列の中にある数値 1 ではなく 900 にマッチさせたいとします。

'1 computer costs $900'Code language: JavaScript (javascript)

これを行うには、正規表現に次のように Lookahead(ルックアヘッド)を使用します。

/(?<=\$)\d+/

この正規表現では

  • (?<=\$) は直前に文字列リテラル $ があれば要素に一致します。$ は正規表現内の特殊文字であるため、バックスラッシュ \ を使用してエスケープする必要があります。これにより、正規表現エンジンは \$ を文字通りの文字 $ として扱います。
  • \d+ は 1 つ以上の数字に一致します。

次の例は、正規表現で Lookbehind(ルックビハインド)を使用して直前に $ 記号のある数字にマッチさせる方法を示しています。

const s = '1 computer costs $900';
const pattern = /(?<=\$)\d+/;

const match = s.match(pattern);
console.log(match);Code language: JavaScript (javascript)

出力

[ '900', index: 18, input: '1 computer costs $900', groups: undefined ]Code language: JSON / JSON with Comments (json)

ネガティブ Lookbehind(ルックビハインド)

Lookbehind(ルックビハインド)を否定するには、次のような構文を持つネガティブ Lookbehind(ルックビハインド)を使用します。

(?<!Y)X

この構文では、直前に ない Y があれば正規表現エンジンは X に一致します。次の例は、ネガティブ Lookbehind(ルックビハインド)を持つ正規表現を使用して直前に $ 文字のない数字に一致します。

const s = '1 computer costs $900';
const pattern = /(?<!\$)\d+/;

const match = s.match(pattern);
console.log(match);Code language: JavaScript (javascript)

出力

1

サマリー

  • Lookbehind(ルックビハインド) (?<!Y)X は、Y が直前にある場合にのみ X に一致します。
  • ネガティブ Lookbehind(ルックビハインド) (?<!Y)X は、Y が直前にない場合にのみ X に一致します。
このチュートリアルは役に立ちましたか?