我需要正则表达式来删除所有非数字而不是破折号('-')。new RegExp('[^0-9-]')
似乎有效,但new RegExp('[\\D-]')
也删除了破折号。为什么这不一样?
问问题
1347 次
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 回答