Всем привет, ребята помогите решить задачу. Суть, у меня есть строка, и мне нужно сделать так, что бы верхний регистр всегда менялся на нижний, а нижний на верхний. Пример было : HeLllO wOrrLd; Стало : hElLo WoRRld;
let str ='HeLlo WoRlD';
let str2 = ' ';
for (let i = 0; i < str.length; i++) {
if (str.match(/[A-Z]/g) && str.match(/[a-z]/g)) {
str2 = str2 + str.charAt(i).toLowerCase();
str2 = str2 + str.charAt(i).toUpperCase();
}
} console.log(str2);
Получаеться плохо, т. к. строки с разными регистрами накладываються друг на друга.
Сижу уже целый день, ни как не могу понять, буду рад за помощь и объяснение, заранее спасибо!
Вы в строке искали символы нижнего регистра и верхнего и независимо ни от чего добавляли и нижний регистр, и верхний. Бесмысленно.
let str ='HeLlo WoRlD';
let str2 = '';
for (let i = 0; i < str.length; i++) {
if (str[i].match(/[A-Z]/)) {
str2 += str[i].toLowerCase();
}
else if (str[i].match(/[a-z]/)) {
str2 += str[i].toUpperCase();
}
else {str2 += str[i]};
}
console.log(str2);
Также подумайте над тем, что есть варианты эффективнее regexp.
console.log("HeLlo WoRlD".replace(/./g, c => {
var u = c.toUpperCase()
return c === u ? c.toLowerCase() : u
}));
Если буквы только латинские:
console.log("HeLlo WoRlD".replace(/([a-z])|([A-Z])/g, (m,l,u) => u ? m.toLowerCase() : m.toUpperCase()));
Сборка персонального компьютера от Artline: умный выбор для современных пользователей