Как добавить переменную в регулярные выражения

Регэкспы классные. JavaScript тоже.

Здесь забавная статья Я смотрел лаже в лицо и не боюсь называть её по имени
В комментариях к ней  автор приводит пример задачи, похожей на ту, которые использует на собеседованиях:
Подсчитать, сколько раз в текстовой строке встречается заданное сочетание из двух букв (именно в указанном порядке, регистронезависимо). count(str, char1, char2) 

Первая попытка решить её (просто так, для себя) была неудачной

function count(str, char1, char2) {
     var reg1 = new RegExp(char1);
     var reg2 = new RegExp(char2);
     return str.match(\reg1 + reg2\, "ig").length;
}

Самое досадное, что разобраться с использованием переменных в регулярных выражениях я пыталась. Но решения, которые приводил  гугл. оказывались нерабочими

Ну вот. Рабочее решение выглядит так:

function count(str, char1, char2) {
    var re = new RegExp(char1 + char2, 'ig');
    return str.match(re).length;
}

Разница с первоначальным вариантом небольшая, но существенная: первое решение не работает, второе работает.

Кстати, есть ещё один вариант решения

function count(str, char1, char2) {
     return str.split(char1 + char2).length — 1;
}

На первый взгляд он выглядит даже короче, но на самом деле это не так, если вспомнить про регистронезависимость,  которая в регэкспах реализуется флагом i, а здесь требует ещё двух строчек кода для смены регистра текстовой строки и искомого сочетания букв.

Для сравнения возможностей языков можно посмотреть на варианты решения. которые приводят в комментариях. Целые простыни кода. JS крут


P.S. Разумеется, обычный цикл JS тоже может

function count(str, char1, char2) {
  var arr = str.split('');
  var count = 0;
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] == char1 && arr[i + 1] == char2) {
      count++;
    }
  }
  return count;
}