【问题标题】:How to limit a regex capturing group?如何限制正则表达式捕获组?
【发布时间】:2014-08-04 08:11:10
【问题描述】:

我不明白如何限制捕获组。

如果我有这样的正则表达式:

/^(\w{2,}\s\w{2,}){4,15}$/

我认为这会捕获任何字符串:

  • 正好两个字,
  • 每个单词至少有 2 个字符,
  • 整个字符串不超过 15 个字符。

但是我的捕获组的限制不起作用。我可以完全限制捕获组吗?

PS。我正在使用 JavaScript 来测试示例中的正则表达式。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    这个基于前瞻的正则表达式应该适合你:

    /^(?=.{4,15}$)\w{2,}\s\w{2,}$/
    

    Working Demo

    您的正则表达式:^(\w{2,}\s\w{2,}){4,15}$ 基本上意味着应该有 4 到 15 个包含 2 个单词的字符串实例,其中至少 2 个字符由空格分隔

    【讨论】:

    • @Nano {4,15} 本质上是说捕获的组可以出现 4 到 15 次。您想限制实际的字符数。
    • @Nano:请参阅 ExplosionPills 的评论和我为此编辑的答案。
    • facepalm ...我很尴尬:S ...现在你提到它...谢谢! :D
    • 对于这种特殊情况,您也可以使用(?!.{16})
    • ...或者更高效:^\w{2}(?!.{14})\w*\s\w{2,}$
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多