【问题标题】:Regex - string repetition of min length正则表达式 - 最小长度的字符串重复
【发布时间】:2017-04-05 20:07:23
【问题描述】:

我想找到任何重复的字符串。我有以下代码:

let match: Object;
let repetition: ?string;
while ((match = /(.+?)\1+/g.exec(string)) !== null && repetition === null) {
  repetition = match[1];
}

它在 'weabcabcjy' 中找到了 'abc' 复制,但它也在 'all' 中找到了 'll'。我希望使用正则表达式将复制的最小长度限制为 2 个字符。这意味着它总是将至少 2 个字符与其他两个字符进行比较。

【问题讨论】:

    标签: javascript regex replication string-length


    【解决方案1】:

    .+? 模式会找到除换行符之外的任何 一个 或多个字符,因此 all 中的 ll 将得到匹配,因为第一个 l 将被捕获到组 1 中,并且第二个将匹配\1+

    要仅查找 2+ 个字符块的重复,您可以使用惰性 limiting 量词 {2,}?:

    /(.{2,}?)\1+/g
    

    the regex demo

    (.{2,}?)\1+ 模式将匹配并捕获任意两个或更多但尽可能少的字符,而不是换行符,然后捕获 1 个或多个相同的连续子字符串。

    【讨论】:

    • 我在尝试 (.?){2,}\1+ 但我没有想到这种方式。谢谢。
    • 哦,(.?){2,}\1+ 看起来很诡异。量化一个可选模式会导致匹配一个空字符串。避免在 JS 中捕获重复的组,除非您尝试删除一次出现的连续重复。
    猜你喜欢
    • 2014-04-23
    • 2014-11-27
    • 2012-03-02
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多