\c

\c

[1] ES3 によると \c の後には [A-Za-z] が来ないといけません。来ない場合はエラーです。

[2] しかし、実際のブラウザの動作はまちまちです。例えばブラウザによっては \c@ が U+0000 と一致することもあります。 エラーになることもあれば、エラーにはならないこともありますが、何と一致するのか (するとして。) 不明だったりします。 詳しく調べてみないといけませんね。。。

[3] てことで調べた。

<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>

[4] WinIE 7:

[5] SafariChrome:

つまり、

  1. a~z は A~Z におきかえる
  2. 26 のビットを反転する

という処理をしているのですね。

[7] Opera:

完全に仕様通りの実装です。

[8] Firefox3: