В JavaScript есть 3 метода для получения подстроки: substring
, substr
и slice
.
str.slice(start [, end])
Возвращает часть строки от start
до (не включая) end
.
Например:
let str = "stringify";
// 'strin', символы от 0 до 5 (не включая 5)
alert( str.slice(0, 5) );
// 's', от 0 до 1, не включая 1, т. е. только один символ на позиции 0
alert( str.slice(0, 1) );
Если аргумент end
отсутствует, slice
возвращает символы до конца строки:
let str = "stringify";
alert( str.slice(2) ); // ringify, с позиции 2 и до конца
Также для start/end
можно задавать отрицательные значения. Это означает, что позиция определена как заданное количество символов с конца строки:
let str = "stringify";
// начинаем с позиции 4 справа, а заканчиваем на позиции 1 справа
alert( str.slice(-4, -1) ); // gif
str.substring(start [, end])
Возвращает часть строки между start
и end
.
Это — почти то же, что и slice
, но можно задавать start
больше end
.
Например:
let str = "stringify";
// для substring эти два примера — одинаковы
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"
// …но не для slice:
alert( str.slice(2, 6) ); // "ring" (то же самое)
alert( str.slice(6, 2) ); // "" (пустая строка)
Отрицательные значения substring
, в отличие от slice
, не поддерживает, они интерпретируются как 0
.
str.substr(start [, length])
Возвращает часть строки от start
длины length
.
В противоположность предыдущим методам, этот позволяет указать длину вместо конечной позиции:
let str = "stringify";
// ring, получаем 4 символа, начиная с позиции 2
alert( str.substr(2, 4) );
Значение первого аргумента может быть отрицательным, тогда позиция определяется с конца:
let str = "stringify";
// gi, получаем 2 символа, начиная с позиции 4 с конца строки
alert( str.substr(-4, 2) );
Давайте подытожим, как работают эти методы, чтобы не запутаться:
метод | выбирает… | отрицательные значения |
---|---|---|
slice(start, end) | от start до end (не включая end ) | можно передавать отрицательные значения |
substring(start, end) | между start и end | отрицательные значения равнозначны 0 |
substr(start, length) | length символов, начиная от start | значение start может быть отрицательным |
Какой метод выбрать?
Все эти методы эффективно выполняют задачу. Формально у метода substr
есть небольшой недостаток: он описан не в собственно спецификации JavaScript, а в приложении к ней — Annex B. Это приложение описывает возможности языка для использования в браузерах, существующие в основном по историческим причинам. Таким образом, в другом окружении, отличном от браузера, он может не поддерживаться. Однако на практике он работает везде.
Из двух других вариантов, slice
более гибок, он поддерживает отрицательные аргументы, и его короче писать. Так что, в принципе, можно запомнить только его.
Практика
Сделать первый символ заглавным
важность: 5
Напишите функцию ucFirst(str)
, возвращающую строку str
с заглавным первым символом. Например:
ucFirst("вася") == "Вася";
Усечение строки
важность: 5
Создайте функцию truncate(str, maxlength)
, которая проверяет длину строки str
и, если она превосходит maxlength
, заменяет конец str
на "…"
, так, чтобы её длина стала равна maxlength
.
Результатом функции должна быть та же строка, если усечение не требуется, либо, если необходимо, усечённая строка.
Например:
truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хотело…"
truncate("Всем привет!", 20) = "Всем привет!"