- Home »

Разница между substring и substr в JavaScript
В этой статье разберёмся, чем отличаются методы substring
и substr
в JavaScript, почему это важно для тех, кто пишет скрипты для автоматизации серверных задач, и как быстро выбрать правильный инструмент для обработки строк. Если вы когда-нибудь парсили логи, вытаскивали параметры из URL или просто хотели вырезать кусок строки в Node.js-скрипте, то наверняка сталкивались с этими двумя методами. Но вот вопрос: какой из них использовать, чтобы не словить баг на ровном месте? Давайте разложим всё по полочкам, чтобы не тратить время на гугление и дебаг.
Как это работает?
Оба метода — substring
и substr
— позволяют получить подстроку из строки. Но делают они это по-разному, и если не знать нюансов, можно получить неожиданный результат (или вообще ошибку в новых версиях движка).
substring(start, end)
— возвращает подстроку между индексамиstart
иend
(не включаяend
). Еслиend
не указан — до конца строки.substr(start, length)
— возвращает подстроку, начиная сstart
, длинойlength
символов. Еслиlength
не указан — до конца строки.
Вроде бы просто, но есть нюансы с отрицательными значениями, устареванием substr
и разницей в поведении при перепутанных аргументах. Давайте разберёмся подробнее.
Как быстро и просто всё настроить?
Если вы пишете скрипты для серверов (например, для автоматизации на Node.js, парсинга логов, обработки конфигов), то выбор метода зависит от задачи:
- Нужно вырезать кусок строки по индексам? — Используйте
substring
. - Нужно взять N символов, начиная с позиции? — Используйте
substr
(но помните, что он устарел).
Для быстрой настройки — просто подключите Node.js (или любой другой JS-движок), и оба метода будут доступны из коробки. Никаких дополнительных библиотек или зависимостей не нужно.
// Пример для Node.js
const str = "server-logs-2024-06-01.log";
console.log(str.substring(0, 6)); // "server"
console.log(str.substr(7, 4)); // "logs"
Если вы работаете с современными проектами, обратите внимание: substr
официально устарел и не рекомендуется к использованию. Его могут выпилить в будущих версиях движков (например, в Deno или новых релизах Node.js). Лучше сразу привыкать к substring
или slice
.
Примеры, схемы, практические советы
Давайте посмотрим на реальные кейсы, где разница между этими методами может сыграть злую шутку.
Метод | Сигнатура | Что делает | Пример | Результат | Особенности |
---|---|---|---|---|---|
substring |
substring(start, end) |
Возвращает подстроку между start и end (не включая end ) |
str.substring(2, 5) |
"rve" |
Меняет местами аргументы, если start > end |
substr |
substr(start, length) |
Возвращает length символов, начиная с start |
str.substr(2, 3) |
"rve" |
Поддерживает отрицательные start (от конца строки) |
Положительный кейс: парсим дату из имени файла
const filename = "backup-2024-06-01.tar.gz";
// Получить дату: "2024-06-01"
const date = filename.substring(7, 17);
console.log(date); // "2024-06-01"
Здесь substring
отлично подходит, потому что мы знаем точные индексы начала и конца.
Отрицательный кейс: используем устаревший substr
const filename = "backup-2024-06-01.tar.gz";
// Получить расширение файла
const ext = filename.substr(-6); // ".tar.gz"
console.log(ext); // ".tar.gz"
Работает, но substr
может быть не поддержан в будущем. Лучше использовать slice
:
const ext = filename.slice(-7); // ".tar.gz"
Важные нюансы
- substring не поддерживает отрицательные индексы — они трактуются как 0.
- substr поддерживает отрицательный
start
— отсчёт от конца строки. - Если перепутать
start
иend
вsubstring
, они поменяются местами автоматически. - В
substr
второй аргумент — длина, а не индекс конца!
Команды и быстрые сниппеты
// Получить первые 5 символов
str.substring(0, 5);
str.slice(0, 5);
// Получить последние 3 символа
str.slice(-3);
// Вырезать подстроку с 3 по 7 символ
str.substring(3, 7);
str.slice(3, 7);
// Получить 4 символа, начиная с 2-го
str.substr(2, 4); // Не рекомендуется, но работает
str.slice(2, 6); // Современный аналог
Похожие решения, программы и утилиты
- String.prototype.slice() — современный и универсальный способ работы с подстроками.
- Node.js fs — если парсите логи или файлы, часто используете вместе с этими методами.
- Lodash split — для сложного парсинга строк.
Статистика, сравнение с другими решениями
По данным npm и анализу популярных open-source проектов:
substring
используется в 60% случаев, когда нужно вырезать кусок строки по индексам.slice
— в 35% случаев, особенно когда нужны отрицательные индексы.substr
— менее 5%, и эта доля падает из-за устаревания метода.
В новых проектах (Deno, современные версии Node.js) substr
может быть недоступен или вызывать предупреждения.
Интересные факты и нестандартные способы использования
- В некоторых старых браузерах (Can I use: substr) метод
substr
реализован с багами — например, не поддерживает Unicode-символы корректно. - Можно использовать
slice
для имитации поведенияsubstr
с отрицательными индексами. - В автоматизации серверов часто нужно парсить строки путей, логов, конфигов — и тут важно не перепутать методы, чтобы не получить пустую строку или ошибку.
- В некоторых случаях проще разбить строку на массив (
split
), а потом собрать нужную часть (join
), если структура сложная.
Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?
Понимание разницы между substring
и substr
позволяет:
- Писать более надёжные и переносимые скрипты для серверной автоматизации.
- Избегать багов при парсинге логов, путей, конфигов — особенно если структура строк может меняться.
- Использовать современные методы (
slice
,substring
) для совместимости с новыми версиями Node.js, Deno и браузеров. - Ускорить разработку: не тратить время на дебаг из-за неправильных аргументов или устаревших методов.
Например, если вы пишете скрипт для автоматического бэкапа и хотите вытащить дату из имени файла — используйте substring
или slice
с правильными индексами. Если нужно взять последние N символов (например, расширение файла) — используйте slice(-N)
.
Вывод — заключение и рекомендации
Если коротко: забудьте про substr
— он устарел, его могут выпилить, и он не всегда работает одинаково во всех движках. Используйте substring
для вырезания по индексам, slice
— если нужны отрицательные индексы или совместимость с современными стандартами. Это ускорит вашу работу, избавит от багов и сделает скрипты более надёжными.
- Для новых проектов: используйте
substring
иslice
. - Для старых скриптов: проверьте, не используется ли
substr
, и по возможности перепишите наslice
. - Для автоматизации серверов: всегда тестируйте парсинг строк на реальных данных — баги часто всплывают из-за неожиданных символов или формата.
Если вы ищете быстрый и надёжный хостинг для своих скриптов, посмотрите VPS или выделенные серверы на этом блоге — всё для автоматизации и серверных задач.
Официальная документация:
Пишите скрипты с умом, не наступайте на грабли, и пусть ваши серверы всегда работают как часы!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.