在替换之前获取子串的位置

时间:2011-06-15 19:59:36

标签: javascript string replace

如果我有字符串foo bar foo baz foo并且我想用foo替换abcd,我想获得字符串中[0, 8, 16]的替换出现的偏移量这个例子)。我能得到这个职位吗?

3 个答案:

答案 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);

http://jsfiddle.net/pyVaQ/

答案 2 :(得分:2)

你会考虑使用正则表达式吗?这样你就不需要花费很多时间来查找foo部分的位置。如果你绝对需要这些职位,这个解决方案不适合你。

var str = 'foo bar foo baz foo';
str = str.replace(/foo/g,'abcd');
alert(str);