非常に単純で素朴な質問: なぜこれが正しいのですか?
new RegExp('^[a-z]+$', 'i').test('B')
どうやら 'B' は [az] の外ですか?
非常に単純で素朴な質問: なぜこれが正しいのですか?
new RegExp('^[a-z]+$', 'i').test('B')
どうやら 'B' は [az] の外ですか?
はい、ただしi
、正規表現に大文字と小文字を無視するように指示するパラメーターがあります。
RegExの MDN ドキュメントから:
パラメーター
パターン
正規表現のテキスト。
フラグ
指定されている場合、フラグは次の値の任意の組み合わせを持つことができます。
...
i
大文字と小文字を区別しない
クラスを定義しています。つまり、「〜[a-z]
の任意の文字」を象徴しa
ていz
ます。
正規表現は、本質的に、大文字と小文字を区別するSensAtiVeでもあるため、 (実証したように(大文字と小文字を区別しない)フラグを使用しない限り)[a-z]
から異なります。[A-Z]
i
例えば
/[a-z]/ -- Any single character, a through z
/[A-Z]/ -- Any single uppercase letter, A through Z
/[a-zA-Z]/ -- Any single upper or lowercase letter, a through z
/[a-z]/i or /[A-Z]/i -- (note the i) Any upper or lowercase letter, a through z
概要
[az] は、文字 a ~ z を含む文字セットを意味します。
^ は、セットが入力の最初の文字で始まる必要があることを意味するアンカーです。
+ は、文字セットの 1 つ以上に一致する必要があることを意味します。
$ は、セットが入力の最後の文字を終了する必要があることを意味する終了アンカーです。
i は、入力文字の大文字と小文字を区別しないことを意味します。
a
との間の任意の文字を意味しますz
。
フラグ (大文字と小文字を区別しない)を指定したためi
、 も含まれていますB
。
正規表現全体で、文字列に少なくとも 1 文字が含まれていること、およびすべての文字が az または AZ 内にあることがチェックされます。
new RegExp('^[a-z]+$', 'i').test('B')
を返すことを確認できますtrue
。