RegExp:为什么[^ 0-9-]!= [\ D-]?

时间:2013-02-05 20:38:38

标签: javascript regex

我需要正则表达式删除所有不是数字而不是短划线(' - ')。 new RegExp('[^0-9-]')似乎有效但new RegExp('[\\D-]')也删除了破折号。为什么会有所不同?

5 个答案:

答案 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

的简单简写