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