否定简写字符类的意外工作方式

4
正则表达式
/[\D\S]/

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

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

它开始匹配任何数字、空格等字符

我做错了什么吗?


你自己写了答案:每个字符都是“不是数字”或“不是空格”。 - Tim Pietzcker
但是我错过了“或”这个东西。 - Cody
2个回答

6

\D = 所有非数字字符, \S = 所有非空白字符

[\D\S] = 上述字符集的并集 = 所有字符。

为什么?因为\D包含\s\S包含\d

如果你想匹配既不是数字又不是空白字符的字符,可以使用[^\d\s]


1
你的正则表达式会随着匹配过程失效。将正则表达式放在 [] 中意味着它必须与其中一个项目匹配。这两个项目相互覆盖,最终匹配所有内容。理论上,任何非数字字符都将匹配其他任何字符,任何非空格字符也将匹配任何数字和其他字符。
你可以尝试使用 [^\d\s],它表示否定匹配任何数字或任何空格。而不是在原始正则表达式中捕获一切,这将否定\d\s的匹配。你可以在 这里 进行测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接