所以我正在制作一些正则表达式,并在正则表达式中遇到了一些奇怪的行为。
我在正则表达式中有一个字符类,其中包含一堆字符(字母数字),并以空格,短划线和加号结束。使用以下正则表达式可以重现奇怪的行为。
^[ -+]*$
所以会发生什么是空格是有效的文本输入,所以是加号。但是,由于某种原因,破折号不是有效的文本输入。可以通过重新排列类中的字符来修复正则表达式:
^[ +-]*$
现在所有字符都是有效输入。这已在Chrome中使用jsFiddle并使用Expresso重现。
我的问题基本上是,我做错了什么或者这只是奇怪吗? :)
答案 0 :(得分:6)
-
字符在字符类中具有特殊含义。当它出现在两个字符之间时,它会创建一个范围,例如[0-9]
匹配0
和9
之间的任何字符。但是,当放置在角色类的开头或结尾时(或者在转义时),它代表一个文字-
字符。
[ -+]
将匹配空格(字符代码32)和+
(字符代码43)之间的任何字符,包括在内。[ +-]
将匹配空格(字符代码32),+
(字符代码43)或-
(字符代码45)答案 1 :(得分:3)
因为首先你将-
视为"至#34;或a-z
所以它变成space to +
这是一个范围。通过在-
前加上\
或者在第一次或最后放置它来逃避{{1}}。