如何用相同数量的星号替换重复字符?

时间:2015-09-29 21:55:55

标签: javascript regex string replace

我想用星号(*)的相同数字替换重复的字符。

例如:

replaceLetters("keviin");

应该返回:

  

千电子伏** N

replaceLetters("haaa");

应该返回:

  

ħ***

我该怎么做呢?

如果我使用下面的代码,它会替换重复的字符,但它会用一个星号代替整个重复,而不是重复字符的星号数。

function replaceLetters(s) {
    s.replace(/([^])\1+/g, '*');
}

1 个答案:

答案 0 :(得分:2)

.replace()允许将函数作为第二个参数传递。传递的回调函数的参数将是匹配的字符串。一旦访问了匹配的字符串,就可以通过多种方式将匹配的字符串替换为相同数量的星号。

例如,您可以将字符串转换为数组,使用map将每个数组项替换为星号,然后将数组作为字符串重新连接在一起。

function replaceLetters(s) { 
    return s.replace(/([^])\1+/g,function(m) { 
        return m.split('').map(function(){ return '*' }).join(''); 
    }); 
}

或者您可以用星号替换匹配字符串中的每个字符。

function replaceLetters(s) { 
    return s.replace(/([^])\1+/g,function(m) { 
        return m.replace(/[^]/g,'*'); 
    });
}

有很多方法可以解决这个问题,这完全取决于你想要完成任务的方式。