根据我的理解,这个
/[\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
问题:
答案 0 :(得分:4)
我认为15.10.2.16 NonemptyClassRangesNoDash in the standard下的注3会回答:
A - 字符可以按字面处理,也可以表示范围。它是 如果它是ClassRanges的第一个或最后一个字符,则按字面意思对待 范围规范的开始或结束限制,或立即 遵循范围规范。
在这种情况下,我认为immediately follows a range specification
适用。
其他一些示例:[a-f-h]
[\s--9]
[\w\d-\s]