Перенос строки через определенное кол-во символов при наличии пробела JS
Помогите, есть допустим фраза (как пример): "Если тебе тяжело, значит ты поднимаешься в гору. Если тебе легко, значит ты летишь в пропасть."
Нужно чтобы если есть пробел в районе 20 символов реагировало на самый дальний и переносило строку вниз. (Если тебе тяжело, зн) Вот 20 символов должно среагировать на пробел после запятой и получиться вот так: Если тебе тяжело,(перенос строки) значит ты(перенос строки) поднимаешься в гору. (Ну и т.д)
Ответы (1 шт):
Автор решения: vp_arth
→ Ссылка
Алгоритм такой:
режем строку на массив слов
кладём первое слово в текущую строку
в цикле по массиву слов:
если следующее слово не укладывается в лимит:
текущая строка отправляется на выход
или если текущая строка сама больше лимита: # такое может быть при наличии очень длинных слов)
текущая строка отправляется на выход
иначе:
добавляем слово через пробел к текущей строке
остатки в текущей строке отправляются на выход
function splitN(str, N) {
const words = str.trim().split(/\s+/g);
const res = [];
let cur_str = words.shift();
for (const word of words) {
if (cur_str.length + 1 + word.length >=N || cur_str.length>=N) {
res.push(cur_str);
cur_str = word;
} else {
cur_str += ' ' + word;
}
}
res.push(cur_str);
return res.join('\n');
}
const str = 'Если тебе тяжело, значит ты поднимаешься в гору. Если тебе легко, значит ты летишь в пропасть.';
console.log(splitN(str, 20));
Если тебе тяжело, значит ты поднимаешься в гору. Если тебе легко, значит ты летишь в пропасть.