findIndexes(s,kw)应该找到字符串中每个匹配项(kw)出现的起始索引。
function findIndexes(s,kw){
var result = [];
s = " " + s.toLowerCase() + " ";
kw = " " + kw.toLowerCase() + " ";
var i = s.indexOf(kw);
while (i >= 0){
result.push(i);
i = s.indexOf(kw, i+kw.length);
};
console.log("The index of " + kw +":");
for (var i =0; i < result.length; i++)
console.log(result[i]);
}
findIndexes("Apple PEAR banana pineapple STRAWBERRY appLE CrabApple ApPle","apple");
// returns 0, 39, 55
这是我能使它工作的最好但我不喜欢我必须在字符串集(s = " " + s.toLowerCase() + " "; kw = " " + kw.toLowerCase() + " ";
)之前和之后放置空格以排除那些包含搜索词的单词(菠萝,等等。 ..)。我尝试使用RegExp(kw = new RegExp('\\b' + kw + '\\b');
但是它不起作用。如果你能提出更好的解决方案,我将不胜感激。谢谢!
答案 0 :(得分:1)
您可以使用String.prototype.split
将字符串拆分为" "
并以这种方式获取字词,然后根据您要查找的字符检查元素。
function getIndexes (str,key) {
var up="toUpperCase",result = [];
str=str.split (" ");
str.unshift(0);
str.reduce (function (index,word) {
if (key[up]() === word[up]())
result.push(index);
return index + word.length + 1;
});
return result;
}
console.log (
getIndexes (
"Apple PEAR banana pineapple STRAWBERRY appLE CrabApple ApPle","apple"
)
); //[0, 39, 55]
这是Fiddle
答案 1 :(得分:0)
indexOf
method不能与正则表达式一起使用,您需要使用search
method来查找匹配索引。但是,要进行多项匹配,您需要exec
正则表达式:
function findIndexes(s,kw){
var result = [],
kw = new RegExp('\\b' + kw + '\\b', 'ig'),
// case insensitive and global flags ^^
r;
while (r = kw.exec(s)) {
result.push(r.index);
}
console.log.apply(console, result);
return result;
}