Javascript 具有字符转义的字符范围

Javascript 具有字符转义的字符范围,javascript,regex,Javascript,Regex,据我了解,这 /[\d-X]/ 标准不允许: 抽象操作CharacterRange采用两个字符集参数A和B,并执行以下操作: 1.如果A不包含一个字符或B不包含一个字符,则引发SyntaxError异常。。。() 但是,如果-前面/后面有转义符,则某些(大多数?)浏览器将其视为序数字符,以便上面的数字、破折号和X匹配: var re = /[\d-X]/g; for(var i = 0, r = ""; i < 0x10000; i++) { var s = String.fr

据我了解,这

/[\d-X]/
标准不允许:

抽象操作CharacterRange采用两个字符集参数A和B,并执行以下操作: 1.如果A不包含一个字符或B不包含一个字符,则引发SyntaxError异常。。。()

但是,如果
-
前面/后面有转义符,则某些(大多数?)浏览器将其视为序数字符,以便上面的数字、破折号和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
var re=/[\d-X]/g;
对于(变量i=0,r=”“;i<0x10000;i++){
var s=字符串。fromCharCode(i);
如果(!s.replace(re.))
r+=s;
}
控制台日志(r)/-0123456789X
问题:

  • 在所有发动机中都可以观察到这种行为吗?(我已经测试了最新的Webkit和Firefox)
  • 是否有任何解释说明他们为什么决定违反标准(在文档、来源、邮件列表等中)
    • 我认为下面的注释3回答了这个问题:

      字符可以按字面意思处理,也可以表示范围。它是 如果它是类范围的第一个或最后一个字符,则按字面处理, 范围规范的开始或结束限制,或立即 遵循范围规范

      在这种情况下,我认为
      立即遵循适用的范围规范


      其他一些例子:
      [a-f-h]
      [\s--9]
      [\w\d-\s]

      是的,这很有意义。“范围规范”一词没有在标准的其他地方定义,因此实现者可以在这里自由地做出自己的决定。