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

gis*_*rad 4 regex

所以我正在研究一些正则表达式,并在正则表达式中遇到了一些奇怪的行为.

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

^[ -+]*$
Run Code Online (Sandbox Code Playgroud)

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

^[ +-]*$
Run Code Online (Sandbox Code Playgroud)

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

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

p.s*_*w.g 6

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

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

  • @GísliKonráð请记住,您需要转义\ inside字符串文字.尝试`new RegExp("[\\ - +]")` (2认同)