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ć RegExpkonstruktora i przekazać gflagę jako argument.
matchzwraca nullbez ż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.