Просмотр полной версии : Первая буква каждого слова заглавная
Добрый день! Совсем недавно начал изучать JS.
У меня есть такая задача:
Необходимо, чтобы каждое слово во фразе начиналось с заглавной буквы.
Данную задачу решил таким способом:
const str1 = "доброго";
const str2 = "дня";
const str3 = "уважаемый"
console.log(`${str1.charAt(0).toUpperCase() + str1.substring(1)} ${str2.charAt(0).toUpperCase() + str2.substring(1)}, ${str3.charAt(0).toUpperCase() + str3.substring(1)}!`)
В целом - все получилось.
Но. Мне предложили данную задачу решить решить через indexOf и substring. Но не знаю как ...
На входе строка идет целиком, а не по отдельности, как сделал я выше.
Но. Мне предложили данную задачу решить решить через indexOf и substring. Но не знаю как ...
На входе строка идет целиком, а не по отдельности, как сделал я выше.
Как вариант, с помощью indexOf() искать пробел, с некой "текущей позиции"... Потом брать следующий символ, переводить его в верхний регистр и записывать вместо считанного.
Потом смещать "текущую позицию" и повторять действия пока еще есть пробелы.
Как пробелы закончатся - показывать что получилось.
aMacio,
при условии одиночного пробела между словами...
<body>
<script>
const str1 = "доброго";
const str2 = "дня";
const str3 = "уважаемый";
let txt = [str1, str2, str3].join(" ");
let i = -1;
do {
txt = txt.substring(0, ++i) + txt.substring(i, ++i).toUpperCase() + txt.substring(i);
i = txt.indexOf(" ", i);
}
while ( i != -1 );
document.body.append(txt);
</script>
</body>
Я б так сделал:
let phrase = 'слово1 еще что-то я'
console.log(phrase);
let res = transform(phrase);
console.log(res);
function transform(str) {
let arr = str.split(' ').map((item) => item ? item.charAt(0).toUpperCase() + item.substring(1) : item);
return arr.join(' ');
}
Я б так сделал:
решить через indexOf и substring.
:-?
зачем делать как кто то предложил?, это что тест?, особенно если предложили слегка не лучшее
rragegfffa
30.05.2022, 18:09
Разнообразия ради
// Только латиница
const capitalizeWords = str => str.replace(/\b[a-z]/g, m => m.toUpperCase())
// Любые символы из категории "буквы" (в т.ч. вся кириллица), строки типа "кто-то" => "Кто-То"
const capitalizeWords = str => str.replace(/(?<=\P{L}|^)\p{Ll}/gu, m => m.toUpperCase())
Разнообразия ради
// Только латиница
const capitalizeWords = str => str.replace(/\b[a-z]/g, m => m.toUpperCase())
// Любые символы из категории "буквы" (в т.ч. вся кириллица), строки типа "кто-то" => "Кто-То"
const capitalizeWords = str => str.replace(/(?<=\P{L}|^)\p{Ll}/gu, m => m.toUpperCase())
Выдает ошибку: Unsupported RegExp flag: u
Выдает ошибку: Unsupported RegExp flag: u
Какой браузер, какая версия?
ruslan_mart
23.10.2023, 18:05
Короткое решение через регулярку:
function toCapizalize(value) {
return value.replace(/(^|\s)(.)/g, (_, a, b) => a + b.toUpperCase());
}
console.log(toCapizalize('доброго дня уважаемый'));
Простое и быстрое решение через цикл:
function toCapizalize(value) {
let finalValue = '';
let prevChar = ' ';
for (let i = 0; i !== value.length; i++) {
const char = value[i];
if (prevChar === ' ') {
finalValue += char.toUpperCase();
} else {
finalValue += char;
}
prevChar = char;
}
return finalValue;
}
console.log(toCapizalize('доброго дня уважаемый'));
Еще можно так поизвращаться:
function toCapizalize(value) {
const fragments = value.split(/(?:^|\s)(.)/)
.map((item, index) => index % 2 !== 0 ? ' ' + item.toUpperCase() : item);
return fragments.join('').trim();
}
console.log(toCapizalize('доброго дня уважаемый'));
text-transform: capitalize;
И всё, не надо мучать скрипт.:)
ruslan_mart
23.10.2023, 20:21
Aetae, полагаю, что у автора такая задачка на курсах или в универе :)
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot