console.lealog();

@leader22のWeb系に関する勉強めもブログですのだ

特定の文字列の中に、特定の文字列が何回あったかカウントしたい

そして出来る限り速い書き方を知りたい。

'1/2/3/4/5'って文字列の中に、'/'が何回出てきたかを取る例。

案1: 愚直にsplit

'1/2/3/4/5'.split(/\//gm).length - 1;

splitして、端っこいらないのでマイナス1するパターン。

案2: String#match

'1/2/3/4/5'.match(/\//gm).length;

こっちのが王道っぽい。

結果

上記の例でも、案2: String#matchの方が速かった。

どれくらい速かったかというと、手元のChrome 48.0.2564.23 beta (64-bit)だとこんな具合。

console.time('split')
for (var i = 0; i < 100000; i++){
  '1/2/3/4/5'.split(/\//gm).length - 1
}
console.timeEnd('split')

console.time('match')
for (var i = 0; i < 100000; i++){
  '1/2/3/4/5'.match(/\//gm).length;
}
console.timeEnd('match')

// VM12016:5  split: 201.295ms
// VM12016:11 match: 124.047ms

FireFoxでもSafariでも、matchのパターンのが速かった。

ご参考まで。