角括弧 […]
内の複数の文字または文字クラスは “指定された中の任意の文字を探す” ことを意味します。
セット
例えば、[eao]
は3文字 'a'
, 'e'
, または 'o'
のいずれかを意味します。
それは セット と呼ばれます。セットは通常の文字と併せて正規表現の中で使うことができます。:
// [t or m], 次に "op" となる文字列を見つける
alert( "Mop top".match(/[tm]op/gi) ); // "Mop", "top"
セットには複数の文字がありますが、マッチした中での1文字に相当することに注意してください。
従って、下の例ではマッチするものはありません:
// "V" に続き [o or i], その後 "la" となる文字列を見つける
alert( "Voila".match(/V[oi]la/) ); // null, マッチしない
パターンは次のように想定します:
V
,- 次に文字
[oi]
の 1つ, - 次に
la
.
なので、Vola
もしくは Vila
がマッチします。
範囲
角括弧は 文字の範囲 を含むこともあります。
例えば、[a-z]
は a
から z
までの範囲の文字で、 [0-5]
は 0
から 5
までの数字です。
下の例では、x
に続いて2桁の数字または A
から F
までの文字を探しています:
alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF
単語 Exception
で、部分文字列 xce
があることに注目していください。それはパターンにマッチしませんでした。理由はパターン [0-9A-F]
が大文字であるのに対し、小文字だからです。
それも見つけたい場合は、a-f
の範囲も追加します: [0-9A-Fa-f]
。 i
フラグも小文字を許容するでしょう。
文字クラスは、特定の文字セットの短縮形です
例:
- \d –
[0-9]
と同じです, - \w –
[a-zA-Z0-9_]
と同じです, - \s –
[\t\n\v\f\r ]
に他のユニコードの空白文字を加えたものと同じです。
[…]
の内側でも同様に文字クラスを使うことができます。
例えば、“twenty-third” のような言葉に対し、すべての単語文字またはダッシュにマッチさせたいとします。\w
はダッシュを含まないため、\w+
ではできません。しかし [\w-]
とすることができます。
pattern:[\s\S]
のように、可能性のあるすべての文字をカバーするためにクラスの組み合わせを使うこともできます。これは空白及び非空白 – なので任意の文字に一致します。 ドット "."
は改行以外の任意の文字にマッチするので、これはドットよりも広いです。
範囲を除外する
通常の範囲に加えて、 [^…]
のような、範囲を “除外” するものもあります。
それらは開始時にキャレット文字 ^
で指定され、指定されたもの以外の文字 と一致します。
例:
[^aeyo]
–'a'
,'e'
,'y'
または'o'
を除く任意の文字.[^0-9]
– 数字以外の任意の文字,\D
と同じです.[^\s]
– 任意の非空白文字,\S
と同じです.
下の例では、文字、数字または空白以外の文字を探します:
alert( "alice15@gmail.com".match(/[^\d\sA-Z]/gi) ); // @ and .
[…] でエスケープしない
通常、正確にドット文字を見つけたい場合、\.
のようにエスケープが必要です。そしてバックスラッシュが必要な場合には、\\
を使います。
角括弧で囲まれた大多数の特殊文字は、エスケープなしで使うことができます:
- ドット
'.'
. - プラス
'+'
. - 丸括弧
'( )'
. - ダッシュ
'-'
, 先頭または末尾に(範囲を定義していない場合). - キャレット
'^'
, 先頭でない場合(それは除外を意味する). - そして、角括弧の開始
'['
.
つまり、角括弧を意味するものを除いて、すべての特殊文字が許可されます。
角括弧内のドット "."
は単なるドットを意味します。パターン [.,]
は1つの文字を探します: ドットまたはカンマです。
下の例では、正規表現 [-().^+]
は -().^+
の文字の1つを探します:
// エスケープは必要ありません
let reg = /[-().^+]/g;
alert( "1 + 2 - 3".match(reg) ); // +, - にマッチ
…しかし “念の為” エスケープすることを決めた場合にも特に害はありません:
// すべてエスケープ
let reg = /[\-\(\)\.\^\+]/g;
alert( "1 + 2 - 3".match(reg) ); // 同じく動作します: +, -
コメント
<code>
タグを使ってください。複数行の場合は<pre>
を、10行を超える場合にはサンドボックスを使ってください(plnkr, JSBin, codepen…)。