2012-05-08 73 views
0

如何檢查字符串內字符的索引?獲取indexOf字符串內的字符javascript

var str = 'alabama'; 
alert(str.indexOf('a')); 

「indexOf」方法似乎只適用於字符的第一次出現。 任何想法?

+0

你想做什麼?查找所有出現的'a'?數一下'a's? – arb

+0

我試圖獲得'a's的索引。事實上,我需要學習這個過程,以便我可以用它來識別char的位置並用div來包裝它。 – darksoulsong

+0

如果你不得不用div來包裝它,爲什麼不用'str.replace(/ a/g,「

a
」);'? – 2012-05-08 17:48:32

回答

3

您可以編寫自己的函數:

function charIndexes(string, char) { 
    var i, j, indexes = []; for(i=0,j=string.length;i<j;++i) { 
     if(string.charAt(i) === char) { 
      indexes.push(i); 
     } 
    } 

    return indexes; 
} 
6

要找到後續出現,你需要的第二個參數提供給.indexOf,從一個比找到的最後一個出現較高的反覆啓動。

String.prototype.allIndexesOf = function(c, n) { 
    var indexes = []; 
    n = n || 0; 
    while ((n = this.indexOf(c, n)) >= 0) { 
     indexes.push(n++); 
    } 
    return indexes; 
} 

測試:

> "alabama".allIndexesOf("a") 
[0, 2, 4, 6] 

編輯功能更新,以允許fromIndex的規範,每String.indexOf

+0

您的解決方案看起來更乾淨,但我的速度更快:) http://jsperf.com/indexofso – 2012-05-08 17:30:42

+0

是的,在Chrome中內置類型的原型增加了糟糕的性能開銷 - http://jsperf.com/indexofso/2 – Alnitak

+0

還要注意,該版本保留了'String.indexOf()'的語義 - 搜索字符串不必是單個字符。 – Alnitak

0
var str = 'alabama',i=0, ci=[]; 

while((i=str.indexOf('a',i))!=-1) ci.push(i++); 

alert(ci.join(', '));