Substr: примеры (JAVASCRIPT)
substr(start: number, length?: number): stringОписание функции substr в JavaScript
Метод substr() возвращает часть строки, начиная с указанного индекса и на указанное количество символов. Этот метод считается устаревшим (deprecated), и его использование не рекомендуется в новом коде. Предпочтительнее использовать метод slice() или substring().
Функция используется, когда необходимо извлечь подстроку из исходной строки по заданному индексу начала и длине.
Синтаксис: str.substr(start[, length])
Аргументы:
- start (обязательный): Индекс начала извлечения. Если значение отрицательное, то отсчет позиции начинается с конца строки (например, -1 — это последний символ).
- length (необязательный): Количество извлекаемых символов. Если аргумент опущен или его значение превышает количество доступных символов от start до конца строки, то будет возвращена подстрока до конца строки. Если length равен 0 или отрицателен, возвращается пустая строка.
Возвращаемое значение: Новая строка, содержащая извлеченную часть исходной строки. Исходная строка не изменяется.
Примеры использования substr
const str = 'Привет, мир!';
// Старт с позиции 0, длина 6
console.log(str.substr(0, 6));Привет
// Старт с позиции 8 (до конца строки, т.к. длина не указана)
console.log(str.substr(8));мир!
// Отрицательный старт (-4 символ с конца), длина 3
console.log(str.substr(-4, 3));мир
// Отрицательная длина возвращает пустую строку
console.log(str.substr(2, -1));Похожие функции в JavaScript
slice(beginIndex[, endIndex]): Извлекает часть строки между индексами beginIndex (включительно) и endIndex (не включительно). Поддерживает отрицательные индексы. Основная современная замена для substr().
substring(indexStart[, indexEnd]): Извлекает часть строки между индексами. Отрицательные аргументы трактуются как 0. Если indexStart > indexEnd, аргументы меняются местами.
Предпочтение стоит отдавать slice(), так как он более гибкий (работает с отрицательными индексами) и является стандартом. Метод substr() может быть удален из будущих версий стандарта.
Типичные ошибки
1. Путаница с индексацией. Начинающие часто забывают, что индексация начинается с 0.
// Ожидание: получить 'П'
console.log('Привет'.substr(1, 1)); // Получим 'р'р
2. Непонимание отрицательного аргумента length. Отрицательная длина всегда возвращает пустую строку.
// Ожидание: получить конец строки
console.log('Привет'.substr(2, -2)); // Всегда пусто3. Использование нецелых чисел. Аргументы неявно преобразуются в целые числа с помощью Math.floor() (кроме NaN, который становится 0).
console.log('Привет'.substr(1.7, 2.2)); // Превращается в (1, 2)ри
История изменений
Метод substr() не является частью основного стандарта ECMAScript. Он описан в Annex B спецификации ECMAScript, которая описывает дополнительные возможности для веб-браузеров. Функция считается устаревшей с момента публикации стандарта ECMAScript 3 (1999). В последних версиях стандарта её поведение зафиксировано, но рекомендуется использовать slice(). Удаление substr() из браузеров маловероятно из-за обратной совместимости.
Расширенные примеры
Извлечение домена из email.
function getDomain(email) {
const atIndex = email.indexOf('@');
if (atIndex === -1) return '';
return email.substr(atIndex + 1);
}
console.log(getDomain('user@example.com'));example.com
Обработка строк с многобайтовыми символами (например, эмодзи). substr() работает с кодовыми единицами UTF-16, что может привести к разделению суррогатных пар.
const text = 'Hi????';
console.log(text.substr(2, 1)); // Разрыв эмодзи
console.log([...text].slice(2, 3).join('')); // Корректно через Array.from� ????
Симуляция right(string, length) из других языков.
function right(str, length) {
if (length <= 0) return '';
return str.substr(-length);
}
console.log(right('JavaScript', 4));Script
Последовательное извлечение частей строки.
const data = 'ID:12345;STATUS:OK;';
let pos = data.indexOf(':');
const id = data.substr(pos + 1, 5); // '12345'
pos = data.indexOf(':', pos + 1);
const status = data.substr(pos + 1, 2); // 'OK'
console.log(id, status);12345 OK
Аналоги функции в других языках
PHP: substr(): Аналог JavaScript, но с немного другим поведением при отрицательной длине (отрезает конец строки).
echo substr('Привет, мир!', 8, 3);мир
Python: Срезы строк (slicing): Используется синтаксис str[start:stop:step]. Отрицательные индексы также поддерживаются.
text = 'Привет, мир!'
print(text[8:11])мир
MySQL: SUBSTRING() или SUBSTR(): Функции работают схожим образом. Индексация символов в строке начинается с 1.
SELECT SUBSTRING('Привет, мир!', 9, 3);мир