У меня есть шаблон от пользователя вроде [d][e-m][rst] и строка “bcdpql”. Мне нужно проверить, содержит ли строка этот шаблон.
Шаблон работает так: первый символ должен быть ‘d’, второй может быть любой буквой от e до m, а третий может быть ‘r’ или ‘s’ или ‘t’. Это должно работать с любым шаблоном. Например, другой шаблон мог бы быть [w][c-k][np].
Сначала я пробовал вложенные циклы для создания всех возможных комбинаций, но это не сработало. Потом попробовал RegExp, передавая туда шаблон, но не уверен, что делаю правильно:
let text = "bcdpql";
// шаблон [d][e-m][rst]
let pattern = new RegExp('de-mr|s');
let output = text.match(pattern);
Кстати, если тебе нужно динамически преобразовывать такие шаблоны из пользовательского ввода, то можно написать функцию парсер. Например, взять строку [d][e-m][rst] и заменить скобки на нужный формат для regex. Что-то вроде pattern.replace(/\[(.+?)\]/g, '[$1]'). Только учти, что в твоем примере “bcdpql” нет подстроки которая бы подходила под шаблон - символы d, e-m, rst должны идти подряд.
А ты точно правильно понимаешь как должен работать поиск? Я думаю проблема не только в синтаксисе регулярки. В твоей строке “bcdpql” есть буква ‘d’, потом идет что-то еще, но не подряд как в шаблоне. Может быть нужно искать именно последовательные символы?
Твоя проблема в том, что ты неправильно составляешь регулярное выражение. Шаблон [d][e-m][rst] нужно преобразовать в regex как d[e-m][rst], а не как de-mr|s. Попробуй вот так:
let text = "bcdpql";
let pattern = /d[e-m][rst]/;
let output = text.match(pattern);
В твоем случае строка “bcdpql” содержит подстроку “dep” (если взять символы d, e, p), но ‘p’ не входит в диапазон [rst], поэтому совпадения не будет. Проверь свой шаблон еще раз - может быть там должен быть другой диапазон символов?