W tym wpisie pokażę, jak prostym kodem JS rozwiązać problem zliczenia liczby wystąpień konkretnego słowa w ciągu znaków w JavaScript (czy też TypeScript).

Zacznijmy od prostego kodu:

var input = "Oto kot, czy kto to?";
var count = (input.match(/ot/g) || []).length;
console.log(count);

Wyświetli w konsoli “1”.

Co tu się dzieje?

W linii drugiej jest przekazane wyrażenie regularne /ot/g. Oznacza to “szukaj w input wystąpień ‘ot'”. Dodanie flagi g (global) sprawia, że po znalezieniu pierwszego wystąpienia poszukiwania się nie kończą.

Dlaczego 1, nie 2?

Ktoś mógłby uznać, że przecież są 2 wystąpienia “ot” w ciągu input. Tak i nie. Przecież drugie to “Ot”, nie “ot”.

Aby móc zignorować wielkość liter należy wykorzystać dodatkową flagę i (ignore).

var count = (input.match(/ot/gi) || []).length;

Wtedy w wyniku otrzymujemy 2.

Parametryzacja

Co zrobić, aby móc przekazać wyszukiwany tekst jako zmienną do funkcji. Dodatkowo wykorzystam konstruktor RegExp.

function countOccurrences(input, word) {
    return (input.match(new RegExp(word, 'gi')) || []).length;
}