<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ES3</anchor> によると \c の後には [A-Za-z] が来ないといけません。来ない場合はエラーです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> しかし、実際のブラウザの動作はまちまちです。例えばブラウザによっては \c@ が U+0000 と一致することもあります。
エラーになることもあれば、エラーにはならないこともありますが、何と一致するのか (するとして。)
不明だったりします。
詳しく調べてみないといけませんね。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> てことで調べた。</p><p><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0D%0A%0D%0A%20%20var%20r%3B%0D%0A%20%20try%20%7B%0D%0A%20%20%20%20r%20%3D%20RegExp%20('%5E%5C%5Cc')%3B%20%2F%2F%20no%20%24%0D%0A%20%20%7D%20catch%20(e)%20%7B%0D%0A%20%20%20%20w%20('%5C%5Cc%3A%20error')%3B%0D%0A%20%20%7D%0D%0A%20%20w%20('%5C%5Cc%3A')%3B%0D%0A%20%20for%20(var%20j%20%3D%200%3B%20j%20%3C%3D%200xff%3B%20j%2B%2B)%20%7B%0D%0A%20%20%20%20var%20s%20%3D%20String.fromCharCode%20(j)%3B%20%0D%0A%20%20%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20%20%20w%20('%20%20'%20%2B%20j.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D%0D%0A%0D%0Afor%20(var%20i%20%3D%200%3B%20i%20%3C%3D%200xff%3B%20i%2B%2B)%20%7B%0D%0A%20%20var%20r%3B%0D%0A%20%20try%20%7B%0D%0A%20%20%20%20r%20%3D%20RegExp%20('%5E(%3F%3A%5C%5Cc'%20%2B%20String.fromCharCode%20(i)%20%2B%20')%24')%3B%0D%0A%20%20%7D%20catch%20(e)%20%7B%0D%0A%20%20%20%20w%20(i.toString%20(16)%20%2B%20'%3A%20error')%3B%0D%0A%20%20%20%20continue%3B%0D%0A%20%20%7D%0D%0A%20%20w%20('%5C%5Cc%200x'%20%2B%20i.toString%20(16)%20%2B%20'%3A')%3B%0D%0A%20%20for%20(var%20j%20%3D%200%3B%20j%20%3C%3D%200xff%3B%20j%2B%2B)%20%7B%0D%0A%20%20%20%20var%20s%20%3D%20String.fromCharCode%20(j)%3B%20%0D%0A%20%20%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20%20%20w%20('%20%20'%20%2B%20j.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D%0D%0A%20%20var%20s%20%3D%20'c'%20%2B%20String.fromCharCode%20(i)%3B%0D%0A%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20w%20('%20%20%22c%22%200x'%20%2B%20i.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%7D%0D%0A%20%20var%20s%20%3D%20'%5C%5Cc'%20%2B%20String.fromCharCode%20(i)%3B%0D%0A%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20w%20('%20%200x5C%20%22c%22%200x'%20%2B%20i.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%7D%0D%0A%7D%0D%0A%0D%0A%0D%0A%3C%2Fscript%3E" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0D%0A%0D%0A%20%20var%20r%3B%0D%0A%20%20try%20%7B%0D%0A%20%20%20%20r%20%3D%20RegExp%20('%5E%5C%5Cc')%3B%20%2F%2F%20no%20%24%0D%0A%20%20%7D%20catch%20(e)%20%7B%0D%0A%20%20%20%20w%20('%5C%5Cc%3A%20error')%3B%0D%0A%20%20%7D%0D%0A%20%20w%20('%5C%5Cc%3A')%3B%0D%0A%20%20for%20(var%20j%20%3D%200%3B%20j%20%3C%3D%200xff%3B%20j%2B%2B)%20%7B%0D%0A%20%20%20%20var%20s%20%3D%20String.fromCharCode%20(j)%3B%20%0D%0A%20%20%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20%20%20w%20('%20%20'%20%2B%20j.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D%0D%0A%0D%0Afor%20(var%20i%20%3D%200%3B%20i%20%3C%3D%200xff%3B%20i%2B%2B)%20%7B%0D%0A%20%20var%20r%3B%0D%0A%20%20try%20%7B%0D%0A%20%20%20%20r%20%3D%20RegExp%20('%5E(%3F%3A%5C%5Cc'%20%2B%20String.fromCharCode%20(i)%20%2B%20')%24')%3B%0D%0A%20%20%7D%20catch%20(e)%20%7B%0D%0A%20%20%20%20w%20(i.toString%20(16)%20%2B%20'%3A%20error')%3B%0D%0A%20%20%20%20continue%3B%0D%0A%20%20%7D%0D%0A%20%20w%20('%5C%5Cc%200x'%20%2B%20i.toString%20(16)%20%2B%20'%3A')%3B%0D%0A%20%20for%20(var%20j%20%3D%200%3B%20j%20%3C%3D%200xff%3B%20j%2B%2B)%20%7B%0D%0A%20%20%20%20var%20s%20%3D%20String.fromCharCode%20(j)%3B%20%0D%0A%20%20%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20%20%20w%20('%20%20'%20%2B%20j.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D%0D%0A%20%20var%20s%20%3D%20'c'%20%2B%20String.fromCharCode%20(i)%3B%0D%0A%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20w%20('%20%20%22c%22%200x'%20%2B%20i.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%7D%0D%0A%20%20var%20s%20%3D%20'%5C%5Cc'%20%2B%20String.fromCharCode%20(i)%3B%0D%0A%20%20if%20(s.match%20(r))%20%7B%0D%0A%20%20%20%20w%20('%20%200x5C%20%22c%22%200x'%20%2B%20i.toString%20(16)%20%2B%20'%3A%20match')%3B%0D%0A%20%20%7D%0D%0A%7D%0D%0A%0D%0A%0D%0A%3C%2Fscript%3E</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE 7</anchor>:<ul><li>\c$、\c*、\c+、\c?、\c| はそれぞれ文字 $、*、+、?、| に一致する。</li><li>\cA~\cZ、\ca~\cz は仕様通り。</li><li>\c(、\c)、\c[、\c\ はエラー。</li><li>\それ以外や \c だけで終わりになるのはエラーではないが、何にも (少なくても文字 <var>X</var> や文字列 c<var>X</var> や文字列 \c<var>X</var> 
(<var>X</var> は U+0000~U+00FF には) 一致しない。</li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Safari</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor>:<ul><li>\c だけだとエラー。</li><li>\c の後に U+0000~U+003F は U+0040~U+007F とそれぞれ一致する。</li><li>\c の後に U+0040~U+0060 は U+0000~U+0020 とそれぞれ一致する。</li><li>\c の後に U+0061~U+007A は U+0001~U+001A とそれぞれ一致する。</li><li>\c の後に U+007B~U+007F は U+003B~U+003F とそれぞれ一致する。</li><li>\c の後に U+0080~U+00BF は U+00C0~U+00FF とそれぞれ一致する。</li><li>\c の後に U+00C0~U+00FF は U+0080~U+00BF とそれぞれ一致する。</li><li>これ以後はこうなってるみたいです:<ul><li>\c の後に U+<var>X</var>00~U+<var>X</var>3F は U+<var>X</var>40~U+<var>X</var>7F とそれぞれ一致する。</li><li>\c の後に U+<var>X</var>40~U+<var>X</var>7F は U+<var>X</var>00~U+<var>X</var>3F とそれぞれ一致する。</li><li>\c の後に U+<var>X</var>80~U+<var>X</var>BF は U+<var>X</var>C0~U+<var>X</var>FF とそれぞれ一致する。</li><li>\c の後に U+<var>X</var>C0~U+<var>X</var>XFF は U+<var>X</var>80~U+<var>X</var>BF とそれぞれ一致する。</li></ul></li></ul></p><p>つまり、<ol><li>a~z は A~Z におきかえる</li><li>2<sup>6</sup> のビットを反転する</li></ol></p><p>という処理をしているのですね。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor>:<ul><li>\c だけだとエラー。</li><li>\c の後が A~Z、a~z なら仕様通り。</li><li>それ以外だとエラー。</li></ul></p><p>完全に仕様通りの実装です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor>3:<ul><li>\cA~\cZ、\ca~\cz は仕様通り。</li><li>それ以外が続く場合や、 \c だけの場合は、 \\c と同じ意味になる。<ul><li>次の (、)、[、\、+、*、|、^、$ は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ文字</anchor>扱い。</li><li>それ以外はそのままの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>の扱い。</li></ul></li></ul></p></body></html>