【问题标题】:Regular expression combining match with negative lookahead正则表达式结合匹配与负前瞻
【发布时间】:2020-12-18 08:37:51
【问题描述】:

我正在寻找实现以下目标的单个正则表达式:

  • 只匹配包含 [a-z0-9-_] 的单词(所以 /^[a-z0-9-_]+$/i
  • 不要匹配“test”这个词(所以/^(?!test).*$/i

这两个要求都很容易单独实施。但是,一个正则表达式如何将这两个要求结合在一个表达式中呢?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以将匹配逻辑内联到第二个正则表达式中,即使用:

    ^(?!test$)[a-z0-9_-]+$
    

    Demo

    仔细注意负前瞻(?!test$)。当放置在模式的最开始时,它断言匹配不是 exact 单词test。但是,1testtesting 应该是允许的,因为它们不完全是 test

    另外请注意,我使用的字符类与您的版本略有不同。我们应该将- 放在类的最后,因为9-_ 实际上会被解释为9 和下划线之间的所有字符,这可能不是您想要的。

    【讨论】:

    • 完美。不知何故,我没有看到仅内联它的简单解决方案。
    • 旁注:OP 似乎使用了不区分大小写的标志。这不是什么大事,但您可以将课程简化为[\w-]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多