【发布时间】:2020-12-18 08:37:51
【问题描述】:
我正在寻找实现以下目标的单个正则表达式:
- 只匹配包含 [a-z0-9-_] 的单词(所以
/^[a-z0-9-_]+$/i) - 不要匹配“test”这个词(所以
/^(?!test).*$/i)
这两个要求都很容易单独实施。但是,一个正则表达式如何将这两个要求结合在一个表达式中呢?
【问题讨论】:
标签: regex
我正在寻找实现以下目标的单个正则表达式:
/^[a-z0-9-_]+$/i)/^(?!test).*$/i)这两个要求都很容易单独实施。但是,一个正则表达式如何将这两个要求结合在一个表达式中呢?
【问题讨论】:
标签: regex
您可以将匹配逻辑内联到第二个正则表达式中,即使用:
^(?!test$)[a-z0-9_-]+$
仔细注意负前瞻(?!test$)。当放置在模式的最开始时,它断言匹配不是 exact 单词test。但是,1test 和 testing 应该是允许的,因为它们不完全是 test。
另外请注意,我使用的字符类与您的版本略有不同。我们应该将- 放在类的最后,因为9-_ 实际上会被解释为9 和下划线之间的所有字符,这可能不是您想要的。
【讨论】:
[\w-]