Строка содержит не меньше 2 разных символов из списка

Рейтинг: 2Ответов: 1Опубликовано: 12.04.2023

Вот набор символов [!@#$%^&*?], в строке должно быть не меньше двух разных

Ответы

▲ 3Принят
^.*?([!@#$%^&*?]).*?(?!\1)[!@#$%^&*?].*$

Пример на JS

const reg = /^.*?([!@#$%^&*?]).*?(?!\1)[!@#$%^&*?].*$/gm;
var str = `строка содержит ! и содержит второй %
строка содержит 2 одинаковых символа подряд @@
строка не содержит символы
строка % содержит только один символ
строка содержит аж три символа %%?
!!`;
console.log(str.match(reg));

^ - начало строки
.*? - 0 и более любых символов, вопросительный знак в данном случае смягчает квантификатор *, т.е. до ближайшего подходящего символа из следующей части выражения:

const str = "текст % с повторяющимся % знаком % для примера";
const reg1 = /^.*%/gm;
const reg2 = /^.*?%/gm;
console.log(str.match(reg1) + "\n" + str.match(reg2));

([!@#$%^&*?]) - один символ из вашего набора захватываем в группу
.*?
(?!\1) - негативный просмотр вперед, что следующий символ не равен уже захваченному в группу
[!@#$%^&*?] - символ из шаблона кроме того, который есть в группе
.*$ - ноль и более любых символов до конца строки