2011-06-15 57 views
1

之前,如果我有串foo bar foo baz foo,我想用abcd更換foo,我想替換的出現次數的偏移量的字符串([0, 8, 16]在這個例子中)英寸何我能得到這個職位?獲取子的位置更換

+0

澄清,你的意思是*之前*替換或之後?如果你的意思是在*之後,那麼偏移量將會是[0,9,18] ...... – maerics 2011-06-15 20:26:55

+0

@maerics:謝謝,我修正了它。但是將[[0,8,16]]轉換爲[0,9,18]並不是一個大問題:) – levu 2011-06-15 20:45:58

回答

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] 
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

您會考慮使用正則表達式?通過這種方式,您不需要爲尋找foo零件的位置而煩惱。如果你絕對需要職位,這個解決方案不適合你。

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

不要在你的遊行中下雨,但是OP明確表示他們想要「獲得替換後的子字符串「 – squidbe 2011-06-15 20:23:41

+1

是的,我想獲得職位:) – levu 2011-06-15 20:25:42

+0

魷魚,你做好了不要在遊行上下雨,謝謝凝結反擊。 – paulj 2011-06-16 21:30:39