据我了解,这
/[\d-X]/
标准不允许:
抽象操作 CharacterRange 采用两个 CharSet 参数 A 和 B 并执行以下操作: 1. 如果 A 不包含恰好一个字符或 B 不包含恰好一个字符,则抛出 SyntaxError 异常... ( http://es5.github .io/#x15.10.2.15 )
但是,如果某些(大多数?)浏览器-
前面/后面有转义符,则将其视为序数字符,以便上述匹配数字、破折号和 X:
var re = /[\d-X]/g;
for(var i = 0, r = ""; i < 0x10000; i++) {
var s = String.fromCharCode(i);
if(!s.replace(re, ''))
r += s;
}
console.log(r) // -0123456789X
问题:
- 这种行为在所有引擎中都可以观察到吗?(我已经测试过最新的 Webkit 和 Firefox)
- 是否有任何解释为什么他们决定违反标准(在文档、来源、邮件列表等中)?