Поиск шаблонов в строке с помощью JavaScript / TypeScript

Нужна помощь с поиском шаблонов в тексте

У меня есть шаблон от пользователя вроде [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);

В результате получаю null. Как это можно решить?

Кстати, если тебе нужно динамически преобразовывать такие шаблоны из пользовательского ввода, то можно написать функцию парсер. Например, взять строку [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], поэтому совпадения не будет. Проверь свой шаблон еще раз - может быть там должен быть другой диапазон символов?