Learn JavaScript

substring() - метод для получения части строки в JavaScript

substring() возвращает часть строки по индексам.

По задаче он похож на slice(), но работает немного иначе. Главные отличия: substring() не поддерживает отрицательные индексы и меняет аргументы местами, если start больше end.

Синтаксис

str.substring(start)
str.substring(start, end)

Метод вызывается у строки и возвращает новую строку.

Как работает substring()

const text = "JavaScript";

console.log(text.substring(0, 4)); // "Java"
console.log(text.substring(4));    // "Script"

Первый аргумент - индекс начала, второй - индекс конца.

Символ с индексом end в результат не входит.

const text = "hello";

console.log(text.substring(1, 4)); // "ell"

Если второй аргумент не передать

Если передать только start, строка будет взята от этого индекса до конца.

const text = "JavaScript";

console.log(text.substring(4)); // "Script"

Если start больше end

Если start больше end, substring() просто поменяет их местами.

const text = "hello";

console.log(text.substring(4, 1)); // "ell"

Это важное отличие от slice(), который в такой ситуации вернёт пустую строку.

Отрицательные индексы

substring() не поддерживает отрицательные индексы.

Если передать отрицательное число, оно будет воспринято как 0.

const text = "JavaScript";

console.log(text.substring(-3));    // "JavaScript"
console.log(text.substring(-3, 4)); // "Java"

Если нужна работа с концом строки, обычно удобнее использовать slice().

console.log(text.slice(-6)); // "Script"

Исходная строка не меняется

Строки в JavaScript неизменяемы, поэтому substring() не меняет исходную строку, а возвращает новое значение.

const text = "JavaScript";
const part = text.substring(0, 4);

console.log(text); // "JavaScript"
console.log(part); // "Java"

Если индексы выходят за диапазон

substring() не падает с ошибкой, если индекс выходит за пределы строки.

const text = "abc";

console.log(text.substring(0, 10)); // "abc"
console.log(text.substring(10));    // ""

Когда это полезно

substring() удобно использовать, когда:

  • нужно взять часть строки по обычным индексам
  • отрицательные индексы не нужны
  • важно получить подстроку даже если аргументы случайно переданы в обратном порядке

Пример:

const code = "JS-2025";

console.log(code.substring(0, 2)); // "JS"

substring() и slice()

substring() и slice() часто решают одну и ту же задачу, но ведут себя по-разному.

Разница с отрицательными индексами

const text = "JavaScript";

console.log(text.substring(-6)); // "JavaScript"
console.log(text.slice(-6));     // "Script"

Разница при start > end

const text = "hello";

console.log(text.substring(4, 1)); // "ell"
console.log(text.slice(4, 1));     // ""

Если нужны отрицательные индексы и более предсказуемое поведение, обычно выбирают slice().

Частые ошибки

Ожидать, что substring() поддерживает отрицательные индексы

const text = "hello";

console.log(text.substring(-2)); // "hello"

Для работы с концом строки лучше использовать slice().

Забывать, что конечный индекс не включается

const text = "hello";

console.log(text.substring(1, 4)); // "ell"

Символ с индексом 4 в результат не попадёт.

Быстрая памятка

  • substring(start, end) возвращает часть строки
  • символ с индексом end не включается
  • если end не передать, строка берётся до конца
  • отрицательные индексы воспринимаются как 0
  • если start > end, метод меняет аргументы местами

Коротко

substring() - это метод строки в JavaScript, который возвращает часть строки по индексам. Он похож на slice(), но не поддерживает отрицательные индексы и автоматически меняет start и end местами, если они переданы в обратном порядке.