使用 indexOf 与 while 循环混淆

Confusion with while loop using indexOf

var myString = "Welcome to Example books. The Example website is www.example.com. Visit the Example website today. Thanks for buying Example";
var foundAtPosition = 0;
var exampleCount = 0;
while (foundAtPosition != -1) {
    foundAtPosition = myString.indexOf("Example", foundAtPosition);
    if (foundAtPosition != -1) {
        exampleCount++;
        foundAtPosition++;
    }
}

对于上面的代码,我对循环起点的工作方式有点困惑。如果您看一下,您会看到 foundAtPosition 用作 indexOf() 函数的起点。但是在第一个循环之后 indexOf() 函数将以 foundAtPosition 值作为起点,它是 6,而 "Example" 单词再次在 0 的索引处找到。那么,循环如何跳过第一个结果中的单词并移动到下一个?

myString.indexOf("Example", foundAtPosition); 查找第一个不在 foundAtPosition.

之前的 "Example"

而这个街区,

if (foundAtPosition != -1) {
    exampleCount++;
    foundAtPosition++;
}

递增 foundAtPosition,以便下次搜索向右移动到当前位置。

在第一个循环之后,indexOf() 函数将使用 11 而不是 6。

这是循环:

foundAtPosition:11 / exampleCount:0
foundAtPosition:27 / exampleCount:1
foundAtPosition:67 / exampleCount:2
foundAtPosition:105 / exampleCount:3
foundAtPosition:-1 / exampleCount:4

如您所见,indexOf() 函数将搜索字符串的剩余部分,每次在字符 11、27、67、105 之后都会停止。