Je recommande la réponse de Tim. Cependant, la réponse de Tim n'est pas suffisante, ce commentaire par @blazs déclare "Supposons que searchStr=aaa
y que str=aaaaaa
. Alors, au lieu de trouver 4 occurrences, votre code n'en trouvera que 2 parce que vous faites des sauts par searchStr.length dans la boucle", ce qui est vrai si l'on regarde le code de Tim, en particulier cette ligne ici : startIndex = index + searchStrLen;
Le code de Tim ne serait pas en mesure de trouver une instance de la chaîne recherchée dont la longueur est inférieure à la sienne. J'ai donc modifié la réponse de Tim :
function getIndicesOf(searchStr, str, caseSensitive) {
var startIndex = 0, index, indices = [];
if (!caseSensitive) {
str = str.toLowerCase();
searchStr = searchStr.toLowerCase();
}
while ((index = str.indexOf(searchStr, startIndex)) > -1) {
indices.push(index);
startIndex = index + 1;
}
return indices;
}
var searchStr = prompt("Enter a string.");
var str = prompt("What do you want to search for in the string?");
var indices = getIndicesOf(str, searchStr);
document.getElementById("output").innerHTML = indices + "";
<div id="output"></div>
Le remplacer par + 1
au lieu de + searchStrLen
permettra à l'index 1 d'être dans le tableau des indices si j'ai un str de aaaaaa
et une chaîne de recherche de aaa
.
P.S. Si quelqu'un souhaite que des commentaires soient ajoutés au code pour en expliquer le fonctionnement, qu'il le dise et je me ferai un plaisir de répondre à sa demande.