正则表达式替换重复的字符

时间:2015-08-18 11:24:08

标签: java regex

有人可以给我一个Java正则表达式来替换以下内容。

如果我有这样一句话" Cooooool",我需要将其转换为" Coool" 3点钟。所以我可以用正常的词来区分它"酷"。

另一个前:" happyyyyyy"应该是" happyyy"

$.fn.isOnScreen = function()
{

    var win = $(".d");

    var viewport = {
        top: win.scrollTop(),
        left: win.scrollLeft()
    };
    viewport.right = viewport.left + win.width();
    viewport.bottom = viewport.top + win.height();

    var bounds = this.offset();
    bounds.right = bounds.left + this.outerWidth();
    bounds.bottom = bounds.top + this.outerHeight();

    return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));


};

var i = 0;

$(".d").on('scroll', function()
{
    if ($(".orange").isOnScreen())
    {
        $("#counter").text(i++);
    }

});

我尝试了这个,但它删除了所有重复的字符,只剩下一个。

2 个答案:

答案 0 :(得分:5)

如下所示更改正则表达式。

string.replaceAll("((.)\\2{2})\\2+","$1");
  • (第一个捕捞组的开始。
  • (.)捕获任何角色。在这种情况下,您可以使用[a-z]
  • \\2指的是第二个捕获组。 \\2{2}必须重复两次。
  • )第一个捕获组结束。所以这将捕获前三个重复的字符。
  • \\2+重复第二组一次或多次。

DEMO

答案 1 :(得分:1)

我想你可能会想要这样的东西:

str.replaceAll("([a-zA-Z])\\1\\1+", "$1$1$1");

这将匹配一个字符重复3次或更多次并将用相同的字符替换它三次。

$1只匹配一个字符,因为您要围绕要匹配的字符 \\1\\1+仅匹配该字符,如果它连续出现至少三次。

此调用也比具有巨大的正则表达式且只使用一个$1更具可读性。