2

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

4

5 回答 5

12

[^0-9-]是“任何不是数字或不是破折号的东西是”任何不是数字的东西,或者是
[\D-]破折号

^反转整个字符[]类,因此在您的\D版本中,没有反转,因此 a-是合法匹配。

于 2013-02-05T20:40:58.073 回答
2

因为第二个破折号前面没有否定。(\D实际上应该只有一个反斜杠)表示“所有非数字”,破折号表示破折号。

于 2013-02-05T20:41:14.513 回答
2

因为您已经错误地解释了第二个正则表达式的含义。

^字符类开头的匹配[^0-9-]其中指定的所有字符,特别是非0-9和非的任何字符-。而[\D-]匹配任何不是数字并且是-.

于 2013-02-05T20:42:42.497 回答
2

当您^在字符类 ( []) 中使用时,它的意思是“在这个类中没有任何东西”。 \D只是一个特殊的序列,意思是“任何不是数字的东西”。

所以:

[^0-9-]匹配任何不是数字或-.

[\D-]表示“任何非数字字符(或 a -,它已经是非数字)。这里不需要[],这与仅\D其本身相同。

于 2013-02-05T20:49:21.730 回答
0

\D是简单的简写^0-9

于 2013-02-05T20:41:16.273 回答