次の方法で共有


代替とグループ化

更新 : 2007 年 11 月

| 文字を使用して、2 つ以上の代替表現から選択します。たとえば、章見出しの正規表現を拡張して、章見出し以外のものとも一致させることができます。ただし、それほど単純ではありません。代替を使用すると、| で区切られた表現のうち最も大きい表現と一致します。

次に示す正規表現は、1 桁または 2 桁の数字が続く Chapter または Section のうち、行の先頭または最後にあるものと一致するように思われます。

/^Chapter|Section [1-9][0-9]{0,1}$/

実際には、上に示した正規表現は、行頭にある単語 Chapter、または後に任意の桁数の数字が続く Section のうち行の最後にあるものと一致します。入力文字列が Chapter 22 である場合、上の正規表現は Chapter としか一致しません。入力文字列が Section 22 である場合は、Section 22 と一致します。

正規表現をよりわかりやすくするには、かっこを使用して代替の範囲を制限し、代替表現が Chapter と Section の 2 つの単語だけに適用されるようにします。ただし、かっこは部分式を作成して、後で使用するように記憶する場合にも使用されます。部分式については、前方参照のセクションで説明しています。上の正規表現の適切な位置にかっこを追加して、Chapter 1 または Section 3 のどちらにも一致する正規表現を作成します。

次に示す正規表現では、かっこを使用して Chapter と Section をグループ化し、適切に動作するようにしています。

/^(Chapter|Section) [1-9][0-9]{0,1}$/

この正規表現は正しく動作しますが、Chapter|Section を囲むかっこにより、一致した単語が後で使用できるように記憶されます。上の正規表現では、かっこは 1 組だけであるため、記憶される "サブマッチ" も 1 つだけです。このサブマッチは、RegExp オブジェクトの $1$9 プロパティを使用して参照できます。

上の例では、単語の Chapter と Section をグループ化するためだけにかっこを使用しています。一致結果を記憶させないようにするには、かっこ内の正規表現パターンの前に ?: を指定します。次のように修正すると、サブマッチを記憶せずに同じ機能を得られます。

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

メタ文字 ?: の他にも、"先読み" 一致を作成する、サブマッチを記憶しない 2 つのメタ文字があります。?= を指定した肯定先読みは、かっこ内の正規表現と一致する文字列が始まる位置にある検索文字列と一致します。?! を指定した否定先読みは、正規表現と一致しない文字列が始まる位置にある検索文字列と一致します。

たとえば、Windows 3.1、Windows 95、Windows 98、および Windows NT への参照項目があるドキュメントを考えます。Windows 95、Windows 98、および Windows NT への参照をすべて Windows 2000 への参照に変更して、ドキュメントを更新する必要があるとします。次の正規表現は、肯定先読みを使用して、Windows 95、Windows 98、および Windows NT と一致します。

/Windows(?=95 |98 |NT )/

文字列の次の検索は、先読みに含まれる文字ではなく、パターンが一致した文字列の直後から開始されます。たとえば、上の正規表現で Windows 98 と一致した場合、検索は 98 の直後ではなく、Windows の直後から再開されます。

参照

概念

JScript での逆参照

その他の技術情報

正規表現の概説