メインコンテンツにスキップ
モジュール 6 · レッスン 3 / 4コース内の 23/32~12 min
モジュールのレッスン (3/4)

後読み: `(?<=...)` `(?<!...)`

後読みは先読みの鏡像であり、前を参照します。 現在の位置、まだ幅がゼロです。

  • (?<=...) -- ポジティブ後読み: パターンは先行する必要があります。
  • (?<!...) -- 負の後読み: パターンを先行させてはなりません。
Code
Pattern: (?<=\$)\d+
Sample:  Costo $100, sconto -25, totale $75.
                ^^^                  ^^

$ は一致には含まれていませんが、条件として機能します: 数字のみ 前にドル記号が一致します。

否定的な後読み

Code
Pattern: (?<!\w)\d+
Sample:  Codice abc123 e numero 456.
                              ^^^

(?<!\w) では、数字の前に単語文字が存在しないことが必要です。 abc123 は除外されます (123 の前には c、\w があります)、456 は一致します (123 の前には スペースがあります)。

非捕捉グループとの主な違い

Code
\\$\\d+         matches "$100": the match includes the dollar sign.
(?<=\\$)\\d+    matches "100":  the match contains ONLY the digits.

プレフィックスのない「クリーンな」値を抽出する必要がある場合は、lookbehind 正しい選択です。

JavaScript における後読み互換性

正の (?<=...) と負の (?<!...) の後読みは、現在位置より前にあるものを確認します。 JavaScript では、ES2018 以降でサポートされます。古いブラウザや従来の Node.js エンジンでは、構文コンパイル エラーが発生します。

試してみてください

運動#regex.m6.l3.e1
試行回数: 0読み込み中…

テキスト内の価格から金額 ($ 記号なし) のみを抽出します。

エディターを読み込み中…
ヒントを表示

\\$ を正の後読み (?<=\\$) 内に移動します。位置条件であり、一致の一部ではありません。

3 回の試行後に解決策が利用可能になります

復習演習

運動#regex.m6.l3.e2
試行回数: 0読み込み中…

文字や数字が前にないすべての数字のシーケンスを検索します (つまり、「abc123」のようなコードの一部ではなく、「分離された」数字)。

エディターを読み込み中…
ヒントを表示

前に文字または数字がある場合は、負の後読み (?<!\\w) を使用して除外します。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#regex.m6.l3.e3
試行回数: 0読み込み中…

Find only the digits of negative numbers (digits preceded by the `-` sign), excluding the minus sign from the match.

エディターを読み込み中…
ヒントを表示

マイナス記号 - を正の後読み (?<=-) 内に移動します。

3 回の試行後に解決策が利用可能になります