Ich habe diese Antwort aktualisiert. Ich mag die Idee, ein Match besser zu verwenden, aber es ist langsamer:
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
Verwenden Sie ein Literal für reguläre Ausdrücke, wenn Sie vorher wissen, wonach Sie suchen. Wenn nicht, können Sie den RegExp
Konstruktor verwenden und das g
Flag als Argument übergeben.
match
kehrt null
ohne Ergebnisse zurück, also die|| []
Die ursprüngliche Antwort, die ich 2009 gegeben habe, ist unten. Es wird unnötig ein Array erstellt, aber die Verwendung eines Split ist schneller (Stand September 2014). Ich bin ambivalent, wenn ich die Geschwindigkeit wirklich brauchte, würde es keine Frage geben, dass ich einen Split verwenden würde, aber ich würde es vorziehen, Match zu verwenden.
Alte Antwort (von 2009):
Wenn Sie nach Kommas suchen:
(mainStr.split(",").length - 1) //3
Wenn Sie nach der str suchen
(mainStr.split("str").length - 1) //4
Sowohl in der Antwort von @ Lo als auch in meinem eigenen albernen jsperf-Test- Split kommt die Geschwindigkeit voran, zumindest in Chrome, aber das Erstellen des zusätzlichen Arrays scheint einfach nicht vernünftig zu sein.