Substr: примеры (JAVASCRIPT)

Работа с подстроками: метод substr в JS
Раздел: Строки, Подстроки
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.

Пример javascript
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, что может привести к разделению суррогатных пар.

Пример javascript
const text = 'Hi????';
console.log(text.substr(2, 1)); // Разрыв эмодзи
console.log([...text].slice(2, 3).join('')); // Корректно через Array.from
�
????

Симуляция right(string, length) из других языков.

Пример javascript
function right(str, length) {
    if (length <= 0) return '';
    return str.substr(-length);
}
console.log(right('JavaScript', 4));
Script

Последовательное извлечение частей строки.

Пример javascript
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);
мир

JS substr function comments

En
Substr Returns the characters in a string beginning at the specified location through the specified number of characters