2017-07-12 8 views
0

myNameのすべての出現箇所を私のループで見つけることができない理由がわかりません。textToSearchtextToSearchの先頭近くにある場合、1つのオカレンスしか検出できません。forループを使用して別の文字列の中に文字列を見つける

var textToSearch = "Aaron blue red Aaron green Aaron yellow Aaron"; 
var myName = "Aaron"; 
var hits = []; 
for(i = 0; i < textToSearch.length; i++){ 
    if(textToSearch.substring(i, myName.length) === myName){ 
    hits.push(textToSearch.substring(i, myName.length)); 
    } 
} 
if(hits.length === 0){ 
    console.log("Your name wasn't found!"); 
} else { 
    console.log("Your name was found " + hits.length + " times."); 
    console.log(hits); 
} 

答えて

2

あなたはi + myName.lengthiからサブストリングにする必要があります。

var textToSearch = "Aaron blue red Aaron green Aaron yellow Aaron"; 
 
var myName = "Aaron"; 
 
var hits = []; 
 
for(var i = 0; i < textToSearch.length; i++){ 
 
    if(textToSearch.substring(i, i + myName.length) === myName){ 
 
    hits.push(textToSearch.substring(i, i + myName.length)); 
 
    } 
 
} 
 
if(hits.length === 0){ 
 
    console.log("Your name wasn't found!"); 
 
} else { 
 
    console.log("Your name was found " + hits.length + " times."); 
 
    console.log(hits); 
 
}

ところで別の解決策は、indexOfを使用することです発生

var textToSearch = "Aaron blue red Aaron green Aaron yellow Aaron"; 
 

 
console.log((textToSearch.match(/Aaron/g) || []).length)

0

をカウントするためのより良い方法があります。それは第2のパラメータとしてオフセットをとる。

var textToSearch = "Aaron blue red Aaron green Aaron yellow Aaron"; 
var myName = "Aaron"; 
var hits = 0; 
var lastIndex = 0; 

while(lastIndex != -1){ 
    lastIndex = textToSearch.indexOf(myName, lastIndex); 
    if (lastIndex != -1) { 
    hits++; 
    lastIndex++; 
    } // Search at the next index 
} 

if(hits === 0){ 
    console.log("Your name wasn't found!"); 
} else { 
    console.log("Your name was found " + hits + " times."); 
} 
関連する問題