Регулярка нахождения 2 одинаковых символов в строке
Я пишу функцию, которая будет находить в строке символы, которые встречаются 2 и более раз, и если такие символы есть - заменяет каждый из них на ")", а если символ встретился в строке только один раз, то на "(". Уже придумал как сделать это другим путем, но хочу сделать регуляркой и str.replace - но не понимаю как. Если пишите свой вариант - разжуйте пожалуйста регулярку на самые мелкие части, потому что просто списать не хочется, хочется понять.
вот такие тесты
"din" => "((("
"recede" => "()()()"
"Success" => ")())())"
"(( @" => "))(("
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Для того, чтобы не составлять сложные выражения, воспользуйтесь заменой через функцию:
function ReplacingWithBrackets(text) {
return text.toLowerCase().replace(/./g, (match, offset, string) => {
return (string.split(match).length - 1 > 1) ? ')' : '(';
});
};
console.log(ReplacingWithBrackets('din')); // (((
console.log(ReplacingWithBrackets('recede')); // ()()()
console.log(ReplacingWithBrackets('Success')); // )())())
console.log(ReplacingWithBrackets('(( @')); // ))((
Логика работы такой замены проста:
- Последовательно перебираем все символы (выражение
/./g); - Передаём в функцию замены текущий найденный символ (match) и полную строку (string);
- Разделяем string на части, используя в качестве разделителя match;
- Если частей больше одной, то возвращаем нужную скобку для замены.