Javascript 对字符串中特定字符的计数

Javascript 对字符串中特定字符的计数,javascript,Javascript,我有一根绳子 file123,file456,file789 我想数一数这个字符串中的时间“” 例如,对于这个字符串,答案应该是2,根据所需的项拆分字符串,然后获得结果数组的长度可能会更快 var count = "file123,file456,file789".split(",").length - 1; var haystack = 'file123,file456,file789'; var needle = ','; var count = haystack.split(needl

我有一根绳子

file123,file456,file789
我想数一数这个字符串中的时间“”
例如,对于这个字符串,答案应该是2

,根据所需的项拆分字符串,然后获得结果数组的长度可能会更快

var count = "file123,file456,file789".split(",").length - 1;
var haystack = 'file123,file456,file789';
var needle = ',';
var count = haystack.split(needle).length - 1;

简单正则表达式将为您提供以下长度:

var str = "file123,file456,file789";
var count = str.match(/,/g).length;

由于
split
必须创建另一个数组,因此我建议编写一个类似这样的助手函数

function count(originalString, character) {
    var result = 0, i;
    for (i = 0; i < originalString.length; i += 1) {
        if (character == originalString.charAt(i)) {
            result +=1;
        }
    }
    return result;
}
函数计数(原始字符串,字符){
var结果=0,i;
对于(i=0;i
如果处理的是大字符串,可以使用以下命令来降低内存:

var re = /,/g,
str = 'file123,file456,file789',
count = 0;

while (re.exec(str)) {
    ++count;
}

console.log(count);
-

性能比使用
String.match()
的解决方案低20%左右,但如果您关心内存,它会有所帮助

更新 不那么性感,但速度更快:

var count = 0,
pos = -1;

while ((pos = str.indexOf(',', pos + 1)) != -1) {
  ++count;
}

有很多方法可以做到这一点,但这里有几个例子:)

一,

二,


如果字符串非常大,则必须构造一个大数组。我喜欢这个数组,尽管它会生成一个匹配数组,然后被丢弃:)@Jack也会这样做
。split
和@h2ooooooo是的,exec()(我的答案)是:)@Jack
exec()
实际上是我的第三个,每秒~3K次,其中
split()
match()
的运算速度约为每秒4.5K。@h2ooooooo我的意思是秒,因为split()和match()是一回事:)。也就是说,您的解决方案显然使用的内存更少。@h2ooooo但这是最慢的。'(你本可以利用
String.indexOf()
(我回答的第二部分)…我想这一切都归结为尽可能减少“userland”代码..也许:)@Jack谢谢:)正如你所说,最好尽可能依赖内置函数。如果不匹配,哪一个返回0?如果不匹配,这两个都返回0。为什么不匹配?我的答案是否有误/毫无用处?
"123,123,123".split(",").length-1
("123,123,123".match(/,/g)||[]).length