否定速记字符类的意外工作

时间:2013-05-21 14:02:57

标签: regex regex-negation

正则表达式

/[\D\S]/

应该匹配不是数字或不是空格的字符

但是当我在regexpal中测试这个表达时

它开始匹配任何数字,空格

的字符

我做错了什么?

2 个答案:

答案 0 :(得分:6)

\D =除数字以外的所有字符, \S =除了空格之外的所有字符

[\D\S] = union (set theory)以上字符组=所有字符。

为什么呢?由于\D包含\s\S包含\d

如果您想匹配不是dights或空格的字符,可以使用[^\d\s]

答案 1 :(得分:1)

你的正则表达式自身无效。将正则表达式置于[]内意味着它必须匹配其中的一个项目。这两个项互相覆盖,最终匹配所有内容。从理论上讲,任何非数字的东西都会匹配其他所有的字符。可用,任何非空格都匹配任何数字和任何其他字符。同样。

您可以尝试使用[^\d\s]来表示否定任何数字或任何空格的匹配。这取代了\d\s的匹配,而不是将所有内容都放在原始正则表达式中。您可以看到使用它完成的测试here