我正在运行以下代码以获取相关输出,该输出显示单词Eric的字母。
/*jshint multistr:true */
text = "My name is Eric. Eric lives in New York";
var myName = "Eric";
var hits = [];
for (var i=0; i < text.length; i++) {
if (text[i] == "E" ) {
for (var j=i; j < (myName.length + i); j++) {
hits.push(text[j]);
}
}
}
if (hits.length === 0) {
console.log("Your name wasn't found!");
} else {
console.log(hits);
}
我可以获得所需的输出,即['E','r','i','c','E','r','i','c']
但是,当我在代码的第8行中输入“ l”时,将得到以下输出:
['l','i','v','e','s','','i']
根据我的理解,代码应返回一条消息:找不到您的名字!。
相反,它仍在处理字母l之后的字符,并将其作为输出返回。
如何更好地优化代码,以确保仅搜索字符串Eric中的字符并作为输出返回,而其他任何字符都将被拒绝?
最佳答案
如果Eric完全匹配,则仅将其放入数组中。
例如(Eric在数组中,但Eriic不是)
工作演示http://jsfiddle.net/9UcBS/1
text = "My name is Eric. Eric lives in New York Eriic";
var myName = "Eric";
var hits = [];
var pos = text.indexOf(myName);
while (pos > -1) {
for (var j = pos; j < (myName.length + pos); j++) {
hits.push(text[j]);
}
pos = text.indexOf(myName, pos + 1);
}
(hits.length === 0) ? console.log("Your name wasn't found!") : console.log(hits);