(?x)現在の括弧のセットの最後まで適用されます。括弧内にない場合は正規表現全体に適用されます。 括弧内に(?x:...)あるものすべてに適用されます。
だから、本当に、これ:
(?x: ... )
これを書く簡単な方法です:
(?:(?x) ... )
そしてそれはこのように機能します:
/red (?i) blue ( ( (?x) ( (?-i) green ) yellow ) purple )/
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
'i' is turned on here... and here
^^^^^^^^^^^^^
but 'i' is turned off here
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'x' is turned on here
(?s-m:...)別のショートカットです。s オンとm オフが切り替わります。と書くこともできますが(?:(?s)(?-m)...)、読むのはかなり難しいです。
(?ix-ix:...)オンとオフの両方iをオンにしても意味がないため、これはかなり悪い例です。x
例:
これは一致します:
/one (?i)TWO THREE/.match 'one two three'
iフラグは():内でのみ適用されるため、これは行われません。
/one ((?i)TWO) THREE/.match 'one two three'
これもキャプチャされません。括弧がキャプチャされないことを除いて、上記と同じです。
/one (?i:TWO) THREE/.match 'one two three'
しかし、これらは一致します:
/one (?i:TWO THREE)/.match 'one two three'
/one (?i:TWO) three/.match 'one two three'