-
Notifications
You must be signed in to change notification settings - Fork 4
/
969.txt
50 lines (40 loc) · 4.36 KB
/
969.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[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]]:
- \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 と同じ意味になる。
-- 次の (、)、[、\、+、*、|、^、$ は[[メタ文字]]扱い。
-- それ以外はそのままの[[文字]]の扱い。