mugaxのなんでも情報局

いろんな分野について発信していきます。

同じ文字が3つ連続で並んでいる回数を求める in JavaScript

文字列の中に同じ文字が3つ連続で並んでいる箇所がいくつかあるか求める、というプログラミングの練習問題がある。
例えば、文字列が"abcXXXabc"の場合、答えは1になる。
また、"xxxabyyyycd"の場合は、yが4つ並んでいる箇所には3連続のyが2か所あるので、答えは3ということになる。

ループを使うのが普通の解き方だが、正規表現を使うと、とても簡単に解くことができる。


function countTriple(str){
  let arr = str.match(/(.)(?=\1{2})/g) ?? [];
  return arr.length;
}

ここで必要なのは先読みという手法だ。単純に「(.)\1{2}」などとすると、重なり合っている部分、つまり先の例ではyが4つ並んでいる部分で1つしかマッチしないのだ。
ちなみに、2行目の「?? [] 」というのは、マッチしなかったときにmatch()がnullを返すので、そのまま長さを求めるとエラーになってしまうため、nullのときは長さ0の配列を代入するという意味である。