Как добавить переменную в регулярные выражения
Регэкспы классные. 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;
}
Здесь забавная статья Я смотрел лаже в лицо и не боюсь называть её по имени
В комментариях к ней автор приводит пример задачи, похожей на ту, которые использует на собеседованиях:
Подсчитать, сколько раз в текстовой строке встречается заданное сочетание из двух букв (именно в указанном порядке, регистронезависимо). 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;
}