我可以有/[abcd]/
,/(ab|cd)/
和/[^wxyz]/
. 为什么不/(^wx|yz)/
显然,您可以通过简单地将功能与其他功能组合在一起来实现完全相同的效果,如下所示/(?!wx|yz)../
:
那么为什么不直接支持该功能呢?有根本原因吗?
我可以有/[abcd]/
,/(ab|cd)/
和/[^wxyz]/
. 为什么不/(^wx|yz)/
显然,您可以通过简单地将功能与其他功能组合在一起来实现完全相同的效果,如下所示/(?!wx|yz)../
:
那么为什么不直接支持该功能呢?有根本原因吗?
所以,想象一下这(^wx|yz)
意味着——正如你显然想要的——“一个既不是wx
也不是”的两个字符序列yz
。什么(^vwx|yz)
意思?它是否意味着“既不是vwx
也不是”的两个或三个字符序列yz
?它是否意味着“不是vwx
以开头且不以 开头的三字符序列yz
,还是以”开头的两字符序列yz
?
字符类表示法的强大之处[...]
——它支持范围a-z
、支持否定等的原因——是它始终匹配单个字符。一旦您取消该限制,就不再清楚这些事情的含义。
你期望的行为/(^wx|yz)/
是什么?在我看来,一个空字符串似乎可以满足您提出的“否定交替”。如果您希望它尝试匹配相同数量的字符,那么使用可变长度正则表达式的否定替换呢?
我想在这里说明的是,否定的交替太模糊而无法实现,最明显的方法是无论如何作为零宽度断言,所以你可以只使用(?!...)
.