从 Chrome 控制台,我注意到了这个奇怪的地方:
/[^A-z]/.test("^")
false
/[A-z]/.test("^")
true
"^".charCodeAt(0)
94
"A".charCodeAt(0)
65
"z".charCodeAt(0)
122
/[a-zA-Z]/.test("^")
false
插入符号在 65-122 范围内匹配是有道理的,因为它的字符代码是 94,但我没有意识到 /[Az]/ 不等于 /[a-zA-Z]/。
所以我想我的问题是,javascript 是否将 ASCII 代码用于像 Az 这样的范围匹配?这是对这种行为的解释吗?
编辑:
经过进一步调查,这似乎是真的
String.fromCharCode(91)
"["
String.fromCharCode(92)
"\"
String.fromCharCode(93)
"]"
String.fromCharCode(94)
"^"
String.fromCharCode(95)
"_"
String.fromCharCode(96)
"`"
/[^A-z]/.test("^[\\_`")
false