我需要正则表达式删除所有不是数字而不是短划线(' - ')。 new RegExp('[^0-9-]')
似乎有效但new RegExp('[\\D-]')
也删除了破折号。为什么会有所不同?
答案 0 :(得分:11)
[^0-9-]
是“任何不是数字,或者不是破折号的东西”
[\D-]
是“不是数字的任何标志,或者是破折号
^
会反转整个[]
字符类,因此在您的\D
版本中,没有反转,因此-
是合法匹配。
答案 1 :(得分:2)
因为在第二个破折号前面没有否定。 \D
(实际上只应该有一个反斜杠)表示“所有非数字”,短划线表示破折号。
答案 2 :(得分:2)
因为你已经解释了第二个正则表达式的含义错误。
字符类^
开头的[^0-9-]
匹配其中指定的所有字符,特别是不是0-9
而不是-
的所有字符。而[\D-]
匹配任何不是数字且-
的任何内容。
答案 3 :(得分:2)
在字符类(^
)中使用[]
时,表示“此类中没有任何内容”。 \D
只是一个特殊的序列,意思是“任何不是数字的东西”。
所以:
[^0-9-]
匹配任何非数字或-
。
[\D-]
表示“任何非数字字符(或-
,已经非数字)。不需要{{1}在这里,这与[]
本身相同。
答案 4 :(得分:0)
\D
是^0-9