在Javascript中是否有一个函数返回给定字符串出现的次数?

Wil*_*eja 3 javascript string

在Javascript中是否有一个函数返回给定字符串出现的次数?我需要返回一个数值,该值等于给定字符串在特定字符串中出现的次数,例如:

var myString = "This is a test text"
Run Code Online (Sandbox Code Playgroud)

如果我必须te在上面的字符串中搜索' ',它将返回2.

T.J*_*der 13

非常接近:你可以String#match这样做:

var count = "This is a test text".match(/te/g).length;
Run Code Online (Sandbox Code Playgroud)

它使用正则表达式/te/g(从字面上全局搜索"te")并要求字符串返回匹配数组.然后数组的长度是计数.

当然,这会创建一个中间数组,如果您有一个大的结果集,这可能并不理想.如果你不介意循环:

function countMatches(str, re) {
    var counter;

    counter = 0;
    while (re.test(str)) {
        ++counter;
    }
    return counter;
}

var count = countMatches("This is a test text", /te/g);
Run Code Online (Sandbox Code Playgroud)

这用于RegExp#test查找匹配而不创建中间数组.(感谢肯纳贝克的评论指出,我刚才的使用RegExp#exec在上面创建中介阵列不必要的!)无论是更有效的将完全取决于有多少这些您希望匹配的,因为版本创建的一个大数组可能会在String#match调用中进行优化,因此以更多(临时)内存使用为代价更快 - 大型结果集可能会因尝试分配内存而陷入困境,但一小部分不太可能.

编辑重新评论下面的评论,如果你不是在寻找模式并且你不介意循环,你可能想要这样做:

function countMatches(str, substr) {
    var index, counter, sublength;

    sublength = substr.length;
    counter = 0;
    for (index = str.indexOf(substr);
         index >= 0;
         index = str.indexOf(substr, index + sublength))
    {
        ++counter;
    }
    return counter;
}

var count = countMatches("This is a test text", "te");
Run Code Online (Sandbox Code Playgroud)

我知道没有预先制作的非RegExp方法来做到这一点.