JavaScript: slice и другие методы для работы с подстроками

JavaScript предоставляет три метода выборки подстроки из существующей строки: slice, substring и substr. Метод slice более гибкий, чем substring, а использование substr не рекомендуется, поскольку этот метод не стандартизирован в ECMAScript. Тем не менее, в этой статье мы рассмотрим и продемонстрируем все три метода, начиная с JS slice.

slice

При применении к строке метода slice возвращается новая строка, в которой содержится отрывок изначальной, определяемый переданными аргументами. Первый аргумент указывает индекс, с которого начинается выборка символов. Второй аргумент — необязательный, он задаёт конечный индекс.

Если второй аргумент не указан, метод slice извлечёт все символы до конца строки:

var str = 'невероятно';
// передаём индекс 2 в метод slice. нумерация начинается с нуля.
var str2 = str.slice(2);
console.log(str2); // вероятно

Выбранная подстрока не включает в себя индекс, который указан в конечном аргументе:

var str = 'невероятно';
var str3 = str.slice(2, 4);
console.log(str3); // ве

Как видно из примера, приведенного выше, метод slice возвращает символ, указанный как индекс в первом аргументе, но не возвращает индекс, указанный во втором.

Оба аргумента могут использовать отрицательные числа. В таких случаях они указывают начальный и конечный индекс, отсчитывая обратно с конца строки. В примере, приведенном ниже, мы выберем четыре последних символа, передав slice значение -4:

var str = 'невероятно';
var str4 = str.slice(-4);
console.log(str4); // ятно

В следующем примере мы передадим JS slice string аргументы -4 и -2. Таким образом, мы начнём выборку подстроки за четыре символа до конца строки и закончим за два символа до конца:

var str = 'невероятно';
var str5 = str.slice(-4, -2);
console.log(str5); // ят

substring

Метод substring похож на slice тем, что мы указываем начальный и конечный индекс для выборки. Но в отличие от slice, мы не можем использовать отрицательные числа.

В следующем примере мы покажем, как достичь тех же самых результатов, используя substring:

var str = 'невероятно';
var str2 = str.substring(2);
console.log( str2 ); // вероятно

var str3 = str.substring(2, 4);
console.log( str3 ); // ве

// используем str.length для указания индекса, считая с конца строки
var str4 = str.substring( str.length -4 );
console.log( str4 ); // ятно

var str5 = str.substring( str.length -4, str.length -2 );
console.log( str5 ); // ят

Мы получили те же самые результаты, используя метод substring. Но из-за того, что отрицательные числа не поддерживаются, его довольно неудобно использовать, если нужно указать индекс, начиная с конца строки.

substr

Метод substr похож на substring и JS slice тем, что выбирает часть строки и возвращает новую. Но вместо того, чтобы указывать начало и конец выбранного отрывка, мы указываем начало отрывка и длину возвращаемой подстроки.

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

Этот метод и поддерживается большим количеством браузеров, но он не стандартизирован в ECMAScript и во многих источниках указывается как устаревший.

Следующий пример демонстрирует использование метода substr для достижения результатов, аналогичных применению методов slice и substring:

var str = 'невероятно';
var str2 = str.substr(2);
console.log(str2); // вероятно

// аргументы: начальный индекс, длина
var str3 = str.substr(2, 2);
console.log(str3); // ве

// отсчёт с конца строки
var str4 = str.substr(-4);
console.log(str4); // ятно

var str5 = str.substr(-4, 2);
console.log(str5); // ят

Перевод статьи “JavaScript slice and Other Substring Methods” был подготовлен дружной командой проекта Сайтостроение от А до Я.