我正在寻找一个实现以下功能的正则表达式:
- 仅匹配包含[a-z0-_]的单词(so
/^[a-z0-9-_]+$/i
( - 与单词"不匹配;测试";(因此
/^(?!test).*$/i
(
这两个需求都很容易单独实现。但是,将两个需求组合在一个表达式中的正则表达式会是什么样子呢?
您可以将匹配逻辑内联到第二个正则表达式中,即使用:
^(?!test$)[a-z0-9_-]+$
演示
仔细注意负面前瞻(?!test$)
。当放置在模式的最开始时,这断言匹配不是精确的字test
。但是,应该允许1test
和testing
,因为它们并不完全是test
。
还要注意,我使用的字符类与您的版本略有不同。我们应该把-
放在类的最后,因为9-_
实际上会被解释为9
和下划线之间的所有字符,这可能不是您想要的。