如何返回字符串中子字符串的频率?

时间:2013-11-06 21:02:10

标签: javascript arrays string substring find-occurrences

function occurrence(string,substring) {
    var counter = 0;
    var sub = substring.toLowerCase();
    var str = string.toLowerCase(); 
    var array = []
    var ans;

    for (var i = 0; i < str.length; i++) {
        if (str.indexOf(sub) != -1) {
            array[counter] = str.indexOf(sub);
            counter += 1;
            ans = array.length
            alert(array); //tester to see inside array
        } else {
            ans = 0;
        }
    }
    return ans
}

alert(occurrence("Party arty art","art")) //tester to see function in action

在上面显示的测试仪中,它应该打印出来3.但是使用我的代码,它会打印出字符串的长度。我正在尝试将“art”所在的索引存储在数组中的字符串中,以便我可以打印出数组以给出出现次数。然而,当我在循环内警告阵列时,它只打印出“1,1,1,1,1,1,1,1,1,1,1,1,1,1”。

注意:我正在尝试使用尽可能少的内置函数编写此代码。我是javascript的新手,所以一些指导将非常感激。

我也试图在没有.match()

的情况下写这个

3 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

function occurrence(string, substring) {
    var counter = 0;
    var sub = substring.toLowerCase();
    var str = string.toLowerCase(); 
    var array = [];
    var index = -1;

    do {
        index = str.indexOf(sub, index + 1);
        if (index != -1) {
            array[counter++] = index;
            i = index;
        }
    } while (index != -1);

    return counter; // or return array; if you want the indexes
}

答案 1 :(得分:0)

您是否考虑过进行正则表达式匹配?在这种情况下,这可能是最好的。

你走了: (PS,您可能希望在命名变量时避免使用内置名称,如“string”和“integer”)

你需要创建一个函数来从字符串中转义任何正则表达式字符:...然后使用该函数。

function occurrence(str, substr) {
  var escaped = escapeFn(substr)
  var regex = new RegExp(escaped,"g")

  return str.match(regex).length

}
编辑:对不起,我一定错过了你说你不想使用匹配的底部。

答案 2 :(得分:0)

可能想要使用match()

在字符串中搜索“ain”:

var str = "The rain in SPAIN stays mainly in the plain"; 
var res = str.match(/ain/g);

res的结果将是一个值为:

的数组

AIN,AlN,AlN

因此,对于您的示例,此类内容可能有效:

function occurrence(string, substring) {
    var counter = 0;
    var sub = new RegExp(escapeRegexStringCharactersFunction(substring.toLowerCase()),"g");
    var str = string.toLowerCase(); 
    var array = []

    array = str.match(sub);
    counter = array.length;

    return counter;
}

更简单:

function occurrence(string, substring) { 
    var array = []
    var sub = new RegExp(escapeRegexStringCharactersFunction(substring),"gi");
    array = string.match(sub);
    return array.length;
}