在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方法来做到这一点.
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |