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); // ят