Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 20.02.2020
Сообщений: 113

Функция, обрезающая строку, длина которой превосходит заданную, и добавляющая троеточие.

30.03.2021, 17:19. Показов 8360. Ответов 3

Студворк — интернет-сервис помощи студентам
Напишите функцию, которая принимает на вход строку и возвращает его неизменным если его длина не превышает 20 символов. Если длина больше 20, то обрезает строку и добавляет в конец строки "...".
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2021, 17:19
Ответы с готовыми решениями:

Функция добавляющая троеточие
Реализовать функцию добавляющая троеточие после каждого слова в строке

Функция добавляющая к десятичному числу справа заданную цифру
Написать функцию, которая добавляет к целому положительному числу справа заданную цифру от 0 до 9. С помощью этой функции последовательно...

Изменить заданную строку текста так, чтобы её длина была равна указанной длине
Здравствуйте!Столкнулся с такой задачей :Дана строка текста. Изменить его так, чтобы длина строки была равна заданной длине. Если исходная...

3
60 / 43 / 21
Регистрация: 05.11.2018
Сообщений: 53
30.03.2021, 20:09
Делается это очень легко через метод slice. Slice возвращает обрезанный массив, при этом никак не изменяя оригинал. Принимает он два аргумента: с какого индекса начать считывание массива и с какого закончить. Возвращает данные в этом промежутке. Со строками всё работает точно также.

Собственно, сам код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function clampString(inputString, maxLength) {
    if(inputString.length <= maxLength) {
        return inputString;
    }
    // Если первое условие ( длина строки меньше максимальной ) сработало, то следующий код не выполнится
 
    inputString = inputString.slice(0, maxLength);
    inputString += "...";
 
    return inputString;
}
Вариант, где троеточие учитывается ( т.е. если строка с 6 символами обрезается до 5, то её выходная длина вместе с троеточиями будет 5 ):
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function clampString(inputString, maxLength) {
    if(inputString.length <= maxLength) {
        return inputString;
    }
    // Если первое условие ( длина строки меньше максимальной ) сработало, то следующий код не выполнится
 
    inputString = inputString.slice(0, maxLength - 3); // Учитываем троеточие
    inputString += "...";
 
    return inputString;
}
2
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
30.03.2021, 21:14
Здесь хорошо бы пригодилась ретроспективная проверка, но, увы, мой браузер не поддерживает это новшество.
Поэтому от меня такой вариант:
JavaScript
1
2
3
4
5
function clampString(inputString, maxLength) {
  return inputString
    .replace(new RegExp(`([^]{${maxLength + 1}})`), "$1...")
    .slice(0, maxLength + 4);
}
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
31.03.2021, 09:55
DrType, лишний символ берет.
Регулярка будет сложноватая.
Свыше максимума:
JavaScript
1
2
3
4
        function clampString(inputString = "", maxLength) {
            let regexp = new RegExp("(.{" + maxLength + "})(.+)", "s");
            return inputString.replace(regexp, (m, g1, g2) => g1 + (g2 ? "..." : ""));
        }
С обрезкой трех символов:
JavaScript
1
2
3
4
5
6
7
8
9
        function clampString(inputString = "", maxLength) {
            let regexp = new RegExp("(.{" + maxLength + "})(.+)", "s");
            return inputString.replace(regexp, (m, g1, g2) => g2 ? g1.slice(0, maxLength - 3) + "..." : g1);
        }
 
        let str = "Напишите функцию, которая принимает на вход строку";
        // let str = "Напишите фу";
        // let str = "Напишите ф";
        console.log(clampString(str, 10));
Добавлено через 6 минут
-----
Впечатление, что особой практической ценности от регулярки нет..

Добавлено через 1 час 23 минуты
---
JavaScript
1
2
3
4
        function clampString(inputString = "", maxLength) {
            let regexp = new RegExp(`(.{${maxLength}})(.+)`, "s");
            return inputString.replace(regexp, (m, g1, g2) => g2 ? g1 + "..." : g1);
        }
Улучшенный вариант с обрезкой трех символов. Но пришлось вводить три группы:
JavaScript
1
2
3
4
        function clampString(inputString, maxLength) {
            let regexp = new RegExp(`((.{${maxLength - 3}})...)(.+)`, "s");
            return inputString.replace(regexp, (m, g1, g2, g3) => g3 ? g2 + "..." : g1);
        }
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2021, 09:55
Помогаю со студенческими работами здесь

Объединение каждой последовательной пары строк в одну строку, если её длина не будет превышать заданную
Помогите решить задачу. &quot;Объединение каждой последовательной пары строк в одну строку, если её длина не будет превышать...

Объединение каждой последовательной пары строк в одну строку, если её длина не будет превышать заданную
Нужна помощь. Никак не могу написать на СИ &quot;Объединение каждой последовательной пары строк в одну строку, если её длина не будет превышать...

двумерный массив Функция ищет строку, в которой сумма элементов маленькая, и строку, в которой сумма элементов наибольша
двумерный массив Функция ищет строку, в которой сумма элементов маленькая, и строку, в которой сумма элементов наибольшая, и поменять эти...

Найти строку заданной матрицы, в которой длина максимальной серии минимальна
Дана действительная матрица порядка n *m.Найти строку заданной матрицы, в которой длина максимальной серии минимальна. Помогите,...

Рекурсия: вывести заданную строку, в которой цифры записаны в обратном порядке
Дана строка S, надо вывести её, но цифры должны идти в обратном порядке. Формат входных данных Первая строка входного файла содержит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru