SyntaxError: invalid range in character class

当正则表达式中的字符类使用范围,但该范围的起始值大于结束值时,会发生 JavaScript 异常“字符类中的范围无效”。

消息

SyntaxError: Invalid regular expression: /[2-1]/: Range out of order in character class (V8-based)
SyntaxError: invalid range in character class (Firefox)
SyntaxError: Invalid regular expression: range out of order in character class (Safari)

错误类型

SyntaxError

哪里出错了?

在字符类中,你可以用连字符 - 连接两个字符,以表示基于其 Unicode 码点的字符的包含性区间。例如,[a-z] 匹配任何小写字母。然而,如果范围的结束值小于起始值,则该范围不能匹配任何内容,并且很可能是一个错误。

示例

无效案例

js
/[9-1]/; // The range is out of order
/[_-=]/; // _ has value 95, = has value 61

有效情况

js
/[1-9]/; // Swap the range
/[_\-=]/; // Escape the hyphen so it matches the literal character

另见