有人可以给我一个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++);
}
});
我尝试了这个,但它删除了所有重复的字符,只剩下一个。
答案 0 :(得分:5)
如下所示更改正则表达式。
string.replaceAll("((.)\\2{2})\\2+","$1");
(
第一个捕捞组的开始。(.)
捕获任何角色。在这种情况下,您可以使用[a-z]
\\2
指的是第二个捕获组。 \\2{2}
必须重复两次。)
第一个捕获组结束。所以这将捕获前三个重复的字符。\\2+
重复第二组一次或多次。答案 1 :(得分:1)
我想你可能会想要这样的东西:
str.replaceAll("([a-zA-Z])\\1\\1+", "$1$1$1");
这将匹配一个字符重复3次或更多次并将用相同的字符替换它三次。
$1
只匹配一个字符,因为您要围绕要匹配的字符
\\1\\1+
仅匹配该字符,如果它连续出现至少三次。
此调用也比具有巨大的正则表达式且只使用一个$1
更具可读性。