字符串中子字符串的出现次数[Javascript]

时间:2013-11-09 21:21:17

标签: javascript indexing

这段代码只会返回第一个匹配的索引。但是我希望数组“result”保存匹配的所有索引。

function score(string,pattern) {
    var v = string.toUpperCase();
    var s = pattern.toUpperCase();
    var result = [];


    result.push(v.indexOf(s)); 
    return result.length;
}

2 个答案:

答案 0 :(得分:2)

indexOf有第二个参数:start

试试这个:

function score(string,pattern) {
    var v = string.toUpperCase();
    var s = pattern.toUpperCase();
    var result = [];
    for (var i = 0; i < string.length; i++) {
        var index = v.indexOf(s, i);
        if (index != -1) {
            result.push(index);
            i = index;
        }
    }

我们基本上迭代字符串,总是跳到下一个出现。尝试在result.push(index)设置断点,这可能有助于理解代码。

答案 1 :(得分:1)

您可以尝试使用正则表达式:

编辑:根据Kay的建议改进

function score( str, pattern ) {
    pattern = pattern.replace( /([\[\]{}\\*+.?^$\(\)])/g, "\\$1" );

    var re = new RegExp( pattern, "ig" )
      , result = []
      , match
      ;

    while ( match = re.exec( str ) ){
        result.push( match.index );
    }

    return result;
}

score( "0AA34567AA01234AA78900", "AA" ); //[1, 8, 15]
score( "0[[34567[[01234[[78900", "[[" ); //[1, 8, 15]