正则表达式字符类中的空格产生奇怪的结果

时间:2014-06-16 15:44:56

标签: regex

所以我正在制作一些正则表达式,并在正则表达式中遇到了一些奇怪的行为。

我在正则表达式中有一个字符类,其中包含一堆字符(字母数字),并以空格,短划线和加号结束。使用以下正则表达式可以重现奇怪的行为。

^[ -+]*$

所以会发生什么是空格是有效的文本输入,所以是加号。但是,由于某种原因,破折号不是有效的文本输入。可以通过重新排列类中的字符来修复正则表达式:

^[ +-]*$

现在所有字符都是有效输入。这已在Chrome中使用jsFiddle并使用Expresso重现。

我的问题基本上是,我做错了什么或者这只是奇怪吗? :)

2 个答案:

答案 0 :(得分:6)

-字符在字符类中具有特殊含义。当它出现在两个字符之间时,它会创建一个范围,例如[0-9]匹配09之间的任何字符。但是,当放置在角色类的开头或结尾时(或者在转义时),它代表一个文字-字符。

  • [ -+]将匹配空格(字符代码32)和+(字符代码43)之间的任何字符,包括在内。
  • [ +-]将匹配空格(字符代码32),+(字符代码43)或-(字符代码45)

答案 1 :(得分:3)

因为首先你将-视为"至#34;或a-z

中的范围运算符

所以它变成space to +这是一个范围。通过在-前加上\或者在第一次或最后放置它来逃避{{1}}。