@PlasterTom

Как правильно обрезать текст js?

Добрый день. Как правильно обрезать текст с применение различных фильтров: по количеству символов, но чтобы в конце не было пробела и знаков пунктуации (если я ничего не упустил).
Исходный код таков, но здесь не хватает удаления знаков пунктуации.

function kitcut(text, limit) {
                            text = text.trim();
                            if( text.length <= limit) return text;

                            text = text.slice( 0, limit);
                            const lastSpace = text.lastIndexOf(" ");
           
                            if( lastSpace > 0) {
                                text = text.substr(0, lastSpace);
                            }
                            return text + "...";
                        }


Пробовал такой вариант, но он, к сожалению, обрезает не по последнему символу из регулярного выражения. Возможно по первому из последних найденных, точно не знаю как это работает

function kitcut(text, limit) {
                            text = text.trim();
                            if( text.length <= limit) return text;

                            text = text.slice( 0, limit);
                            const lastSpace = text.lastIndexOf(" ");
                        const match      = text.match(/[!.,?]/);
                        const lastIndex  = text.lastIndexOf(match[match.length-1]);

                            if( lastSpace > 0) {
                                text = text.substr(0, lastSpace).substr(0, lastIndex);
                            }
                            return text + "...";
                        }
  • Вопрос задан
  • 9153 просмотра
Решения вопроса 1
Dark_Scorpion
@Dark_Scorpion
Если только пробелы, то самый простой вариант.
function kitcut(text, limit) {
  text = text.trim();
  if( text.length <= limit) return text;

  text = text.slice(0, limit);

  return text.trim() + "...";
}

Если ещё нужно игнорировать определённые символы, то проще идти с конца. Пример функции:
var str = 'Test text. Hello, world!!!!,..,';
var z = getLastIndexWithoutIgnore(str, ['!', ',', '.']);

console.log( 'Index: %s, string: %s', z,  str.slice(0, z+1) );
// => Index: 22, string: Test text. Hello, world

function getLastIndexWithoutIgnore(text, ignoreArr) {
  for(var i = text.length-1; i >= 0; i--) {
    if(ignoreArr.indexOf(text[i]) === -1) {
      return i;
    }
  }

  return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы