[1] [[ES3]] によると \c の後には [A-Za-z] が来ないといけません。来ない場合はエラーです。 [2] しかし、実際のブラウザの動作はまちまちです。例えばブラウザによっては \c@ が U+0000 と一致することもあります。 エラーになることもあれば、エラーにはならないこともありますが、何と一致するのか (するとして。) 不明だったりします。 詳しく調べてみないといけませんね。。。 [3] てことで調べた。 [4] [[WinIE 7]]: - \c$、\c*、\c+、\c?、\c| はそれぞれ文字 $、*、+、?、| に一致する。 - \cA~\cZ、\ca~\cz は仕様通り。 - \c(、\c)、\c[、\c\ はエラー。 - \それ以外や \c だけで終わりになるのはエラーではないが、何にも (少なくても文字 [VAR[X]] や文字列 c[VAR[X]] や文字列 \c[VAR[X]] ([VAR[X]] は U+0000~U+00FF には) 一致しない。 [5] [[Safari]]、[[Chrome]]: - \c だけだとエラー。 - \c の後に U+0000~U+003F は U+0040~U+007F とそれぞれ一致する。 - \c の後に U+0040~U+0060 は U+0000~U+0020 とそれぞれ一致する。 - \c の後に U+0061~U+007A は U+0001~U+001A とそれぞれ一致する。 - \c の後に U+007B~U+007F は U+003B~U+003F とそれぞれ一致する。 - \c の後に U+0080~U+00BF は U+00C0~U+00FF とそれぞれ一致する。 - \c の後に U+00C0~U+00FF は U+0080~U+00BF とそれぞれ一致する。 - これ以後はこうなってるみたいです: -- \c の後に U+[VAR[X]]00~U+[VAR[X]]3F は U+[VAR[X]]40~U+[VAR[X]]7F とそれぞれ一致する。 -- \c の後に U+[VAR[X]]40~U+[VAR[X]]7F は U+[VAR[X]]00~U+[VAR[X]]3F とそれぞれ一致する。 -- \c の後に U+[VAR[X]]80~U+[VAR[X]]BF は U+[VAR[X]]C0~U+[VAR[X]]FF とそれぞれ一致する。 -- \c の後に U+[VAR[X]]C0~U+[VAR[X]]XFF は U+[VAR[X]]80~U+[VAR[X]]BF とそれぞれ一致する。 つまり、 = a~z は A~Z におきかえる = 2[SUP[6]] のビットを反転する という処理をしているのですね。 [7] [[Opera]]: - \c だけだとエラー。 - \c の後が A~Z、a~z なら仕様通り。 - それ以外だとエラー。 完全に仕様通りの実装です。 [8] [[Firefox]]3: - \cA~\cZ、\ca~\cz は仕様通り。 - それ以外が続く場合や、 \c だけの場合は、 \\c と同じ意味になる。 -- 次の (、)、[、\、+、*、|、^、$ は[[メタ文字]]扱い。 -- それ以外はそのままの[[文字]]の扱い。