Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.05.2022, 21:51
Новичок на форуме
Отправить личное сообщение для aMacio Посмотреть профиль Найти все сообщения от aMacio
 
Регистрация: 04.05.2022
Сообщений: 5

Первая буква каждого слова заглавная
Добрый день! Совсем недавно начал изучать 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. Но не знаю как ...
На входе строка идет целиком, а не по отдельности, как сделал я выше.

Последний раз редактировалось aMacio, 04.05.2022 в 23:31.
Ответить с цитированием
  #2 (permalink)  
Старый 04.05.2022, 23:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,170

Сообщение от aMacio
Но. Мне предложили данную задачу решить решить через indexOf и substring. Но не знаю как ...
На входе строка идет целиком, а не по отдельности, как сделал я выше.
Как вариант, с помощью indexOf() искать пробел, с некой "текущей позиции"... Потом брать следующий символ, переводить его в верхний регистр и записывать вместо считанного.
Потом смещать "текущую позицию" и повторять действия пока еще есть пробелы.
Как пробелы закончатся - показывать что получилось.
Ответить с цитированием
  #3 (permalink)  
Старый 04.05.2022, 23:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,087

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>

Последний раз редактировалось рони, 04.05.2022 в 23:54.
Ответить с цитированием
  #4 (permalink)  
Старый 05.05.2022, 08:29
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,571

Я б так сделал:

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(' ');
}
Ответить с цитированием
  #5 (permalink)  
Старый 05.05.2022, 09:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,087

Сообщение от micscr
Я б так сделал:
Сообщение от aMacio
решить через indexOf и substring.
Ответить с цитированием
  #6 (permalink)  
Старый 07.05.2022, 18:15
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,571

зачем делать как кто то предложил?, это что тест?, особенно если предложили слегка не лучшее
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2022, 18:09
Новичок на форуме
Отправить личное сообщение для rragegfffa Посмотреть профиль Найти все сообщения от rragegfffa
 
Регистрация: 07.05.2022
Сообщений: 3

Разнообразия ради

// Только латиница
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())

Последний раз редактировалось rragegfffa, 30.05.2022 в 18:41.
Ответить с цитированием
  #8 (permalink)  
Старый 23.10.2023, 17:37
Новичок на форуме
Отправить личное сообщение для TAPAKAH Посмотреть профиль Найти все сообщения от TAPAKAH
 
Регистрация: 23.10.2023
Сообщений: 1

Сообщение от rragegfffa Посмотреть сообщение
Разнообразия ради

// Только латиница
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
Ответить с цитированием
  #9 (permalink)  
Старый 23.10.2023, 17:57
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,728

Сообщение от TAPAKAH
Выдает ошибку: Unsupported RegExp flag: u
Какой браузер, какая версия?
Ответить с цитированием
  #10 (permalink)  
Старый 23.10.2023, 18:05
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Короткое решение через регулярку:

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('доброго дня уважаемый'));
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как исправить в скрипте счёту вводных слов Артём@@@Q jQuery 0 23.06.2021 12:46
Найти слова в тексте у которых первая и последняя буквы совпадают Alex961 Общие вопросы Javascript 7 10.12.2015 23:36
Первая буква слова zoOmer Общие вопросы Javascript 10 23.06.2015 11:42