SyntaxError: 字符类中范围无效

当正则表达式中的 字符类 使用范围,但范围的起始位置大于结束位置时,就会发生 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)

错误类型

哪里出错了?

在字符类中,可以使用连字符 - 将两个字符连接起来,根据它们的 Unicode 代码点表示一个包含字符的区间。例如,[a-z] 匹配任何小写字母。但是,如果范围的结束位置小于起始位置,则该范围无法匹配任何内容,这很可能是一个错误。

示例

无效情况

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

有效情况

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

另请参阅