Как обрезать строку по количеству символов и до ближайшего пробела?
Есть такая функция:
const trimText = (text, length, end = '') => {
return text.length <= length ?
text :
`${text.substr(0, length)}${end}`;
};
const text = 'Надо как то правильно обрезать от пробела'
const res = trimText(text, 15, end = '...')
console.log(res)
надо что бы было так: Надо как то правильно... а не Надо как то прав...
Ответы (2 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
.indexOf(искомая_подстрока, начальная_позиция) — найти первый пробел после указанного length и резать до него.
let text = 'Надо как то правильно обрезать от пробела';
console.log( trimText(text, 15, end='...') );
function trimText(text, length, end = '') {
let index = text.indexOf(" ", length);
if( index == -1 ) index = length;
return text.slice(0, index) + end;
}
Если бы не он, можно было через .split(" ") начать добавлять элементы в финальную строку, while( result.length < length )
Или,
let text = 'Надо как то правильно обрезать от пробела';
console.log( trimText(text, 4, end='...') );
console.log( trimText(text, 5, end='...') );
function trimText(text, length, end = '') {
let result = text.slice(0, length);
let i = length;
while( text[i] && text[i] != " " ) {
result += text[ i++ ];
}
return result + end;
}
Автор решения: UModeL
→ Ссылка
Есть вариант с использованием регулярного выражения:
const trimText = (text, length, end = '') => {
return text.replace(new RegExp(`(.{0,${length}}\\S*).*`,'i'), '$1') + end;
};
const text = 'Надо как-то правильно обрезать от пробела';
const res = trimText(text, 15, end = '...');
console.log(res);