为什么replace替换不了最后一个字符

我先用indexOf查找了字符位置再替换成空字符,但是不知道为什么最后一个字符替换不了,大神帮看一下

var s = 'cidngicnghcidhgiicdnidh';
    var index = -1;
    do{
        index = s.indexOf('i',index+1);
        if(index !== -1){
            s = s.replace('i','');
        }
    }while(index !== -1);
    document.write(s);

输出为图片说明

最后一个i不知道为啥替换不了咧。

但是如果是替换成“!”就可以了,这是为什么?

var s = 'cidngicnghcidhgiicdnidh';
    var index = -1;
    do{
        index = s.indexOf('i',index+1);
        if(index !== -1){
            s = s.replace('i','!');
        }
    }while(index !== -1);
    document.write(s);

输出为图片说明

index = s.indexOf('i',index+1);你把这行改成 index = s.indexOf('i');这样就对了

替换为空字符串时,会减小字符串长度,同时,index 会增加,导致把 最后一个 i 跳过了, 替换字符串前 打印一下 index 和 字符串 length 即可知道

替换为空,相当于删除了,每次循环去除一个,字符串的排序位置都变化了。