Zaktualizowałem tę odpowiedź. Podoba mi się pomysł lepszego dopasowania, ale jest wolniejszy:
console.log(("str1,str2,str3,str4".match(/,/g) || []).length); //logs 3
console.log(("str1,str2,str3,str4".match(new RegExp("str", "g")) || []).length); //logs 4
jsfiddle
Użyj literału wyrażenia regularnego, jeśli wiesz, czego szukasz, jeśli nie, możesz użyć RegExp
konstruktora i przekazać g
flagę jako argument.
match
zwraca null
bez żadnych wyników, więc|| []
Oryginalna odpowiedź, którą udzieliłem w 2009 roku, jest poniżej. Tworzy tablicę niepotrzebnie, ale użycie podziału jest szybsze (od września 2014 r.). Jestem ambiwalentny, gdybym naprawdę potrzebował prędkości, nie byłoby wątpliwości, że użyłbym podziału, ale wolałbym użyć dopasowania.
Stara odpowiedź (z 2009 r.):
Jeśli szukasz przecinków:
(mainStr.split(",").length - 1) //3
Jeśli szukasz str
(mainStr.split("str").length - 1) //4
Zarówno w odpowiedzi @ Lo, jak i w moim głupim podziale testu jsperf pojawia się szybko, przynajmniej w Chrome, ale znowu tworzenie dodatkowej tablicy po prostu nie wydaje się rozsądne.