如果我有字符串foo bar foo baz foo
并且我想用foo
替换abcd
,我想获得字符串中[0, 8, 16]
的替换出现的偏移量这个例子)。我能得到这个职位吗?
答案 0 :(得分:3)
var getPositions = function(str, sub) {
var arr=[], idx=-1;
while ((idx=str.indexOf(sub,idx+1)) > -1) {
arr.push(idx);
}
return arr;
};
getPositions('foo bar foo baz foo', 'foo'); // => [0, 8, 16]
答案 1 :(得分:2)
如果我理解你所追求的是什么,这对你有用
var getPositions = function (find, str) {
var arr = [],
pos = 0,
flen = find.length,
len = str.length, i;
while (pos < len) {
i = str.indexOf(find, pos);
if (i !== -1) {
arr.push(i);
pos = i + flen;
} else {
return arr.length ? arr : false;
}
}
return arr.length ? arr : false;
};
然后将其称为getPositions("foo", whateverString);
答案 2 :(得分:2)
你会考虑使用正则表达式吗?这样你就不需要花费很多时间来查找foo部分的位置。如果你绝对需要这些职位,这个解决方案不适合你。
var str = 'foo bar foo baz foo';
str = str.replace(/foo/g,'abcd');
alert(str);