Методы объекта String

У примитивных значений или литералов, вроде строки "Иван Петров", не может быть свойств или методов (потому что они не объекты). Однако, в JavaScript все устроено так, что даже у примитивных значений доступны свои методы и свойства, потому что JavaScript интерпретирует любые значения, как объекты с выполняемыми методами и свойствами.

Встроенные методы и свойства строк помогают работать с этими самыми строками.

Длина строки

При помощи свойства length можно узнать длину строки:


var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length; 

Поиск подстроки в строке

Метод indexOf() возвращает индекс (позицию) первого вхождения заданного текста в строке:


var str = "Please locate where 'locate' occurs!";
var pos = str.indexOf("locate"); 

Метод lastIndexOf() возвращает индекс последнего вхождения заданного текста в строке:


var str = "Please locate where 'locate' occurs!";
var pos = str.lastIndexOf("locate"); 

Если подстрока не найдена, то оба метода, indexOf() и lastIndexOf(), вернут -1.

Внимание! JavaScript считает позицию от нуля. 0 это первый символ в строке, 1 — второй, 2 — третий и т.д.

Оба метода в качестве второго параметра принимают начальную позицию поиска:


var str = "Please locate where 'locate' occurs!";
var pos = str.indexOf("locate",15); 

Кроме этого, для поиска подстроки существует метод search(), который возвращает позицию найденной подстроки:


var str = "Please locate where 'locate' occurs!";
var pos = str.search("locate"); 

Вероятно вы заметили, что два метода, indexOf() и search(), очень похожи друг на друга. Они принимают одинаковые аргументы (параметры) и возвращают одинаковые значения. Получается эти методы одно и то же?

На самом деле у этих методов есть ряд существенных отличий:

  • Метод search() не принимает второй, связанный с позицией, параметр.
  • Метод indexOf() не принимает "усиленные" поисковые значения (регулярные выражения).

Подробнее о регулярных выражениях будет рассказано в следующих главах этого учебника.

Извлечение части строки

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

  • slice(начало, конец)
  • substring(начало, конец)
  • substr(начало, длина)

Метод slice()

Метод slice() извлекает часть строки и возвращает извлеченную часть в новой строке.

Этот метод принимает 2 параметра: начальный и конечный индекс (позицию).

В следующем примере вырезается часть строки, начиная с позиции 7 и заканчивая позицией 13:


var str = "Apple, Banana, Kiwi";
var res = str.slice(7, 13); 

В результате в переменной res будет строка "Banana".

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

В следующем примере вырезается часть строки с позиции -12 до позицией -6:


var str = "Apple, Banana, Kiwi";
var res = str.slice(-12, -6); 

В результате в переменной res будет строка "Banana".

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

Внимание! Отрицательные значения параметров не работают в Internet Explorer 8 и более ранних версий.

Метод substring()

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


var str = "Apple, Banana, Kiwi";
var res = str.substring(7, 13); 

В результате в переменной res будет строка "Banana".

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

Метод substr()

Метод substr() аналогичен методу slice(). Разница между ними в том, что вторым параметром в методе substr() задается длина извлекаемой подстроки.


var str = "Apple, Banana, Kiwi";
var res = str.substr(7, 6); 

В результате в переменной res будет строка "Banana".

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

Второй параметр не может быть отрицательным, так как он определяет длину подстроки.

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

Замена содержимого строки

Метод replace() ищет в строке заданную подстроку и заменяет ее другим значением:


str = "Посетите Microsoft!";
var n = str.replace("Microsoft", "MSiter");

В результате в переменной n будет строка "Посетите MSiter!".

Метод replace() не изменяет исходную строку. Он возвращает новую строку.

По умолчанию, метод replace() заменяет первую совпавшую подстроку:


str = "Посетите Microsoft и Microsoft!";
var n = str.replace("Microsoft", "MSiter");

В результате в переменной n будет строка "Посетите MSiter и Microsoft!".

По умолчанию, метод replace() регистрозависим. Поэтому запись подстроки MICROSOFT (большими буквами) в следующем примере не сработает:


str = "Посетите Microsoft!";
var n = str.replace("MICROSOFT", "MSiter");

Чтобы заменить подстроку независимо от регистра букв, используйте регулярное выражение с флагом /i:


str = "Посетите Microsoft!";
var n = str.replace(/MICROSOFT/i, "MSiter");

Обратите внимание, что регулярные выражения записываются без кавычек.

Чтобы заменить все найденные совпадения, используйте регулярное выражение с флагом /g:


str = "Посетите Microsoft и Microsoft!";
var n = str.replace(/Microsoft/g, "MSiter");

Изменение регистра букв

Метод toUpperCase() позволяет преобразовать строку в верхний регистр:


var text1 = "Hello World!";
var text2 = text1.toUpperCase();

Метод toLowerCase() позволяет преобразовать строку в нижний регистр:


var text1 = "Hello World!";
var text2 = text1.toLowerCase();

Метод concat()

Метод concat() объединяет две и больше строк:


var text1 = "Hello";
var text2 = "World";
var text3 = text1.concat(" ", text2); 

Метод concat() может использоваться вместо оператора +. Следующий пример делает то же самое, что и предыдущий:


var text = "Hello" + " " + "World!";
var text = "Hello".concat(" ", "World!");

Следует помнить, что все методы строк возвращают новую строку. Они никак не изменяют исходную строку. Если говорить формально, строки обладают иммунитетом. Они не могут изменяться, их можно только заменить.

Извлечение символа из строки

Существует 2 безопасных метода для извлечения символа из строки:

  • charAt(позиция)
  • charCodeAt(позиция)

Метод charAt()

Метод charAt() возвращает символ строки, расположенный в заданной позиции:


var str = "HELLO WORLD";
str.charAt(0);            // вернет H

Метод charCodeAt()

Метод charCodeAt() возвращает код символа строки, расположенного в заданной позиции:


var str = "HELLO WORLD";
str.charCodeAt(0);         // вернет 72 

Обращение к строке как к массиву небезопасно

Иногда можно увидеть следующий код, в котором к строке обращаются как к массиву:


var str = "HELLO WORLD";

str[0];                   // вернет H

Этого никогда не следует делать, так как это небезопасно и может привести к непредсказуемым результатам:

  • Подобное работает не во всех браузерах (не работает в IE5, IE6, IE7)
  • Выглядит так, будто строка это массив (но на самом деле это не так)
  • Выражение str[0] = "H" не приводит к ошибке (но не работает)

Если вам нужно прочитать строку как массив, то сначала преобразуйте ее в массив.

Преобразование строки в массив

При помощи метода split() строку можно преобразовать в массив:


var txt = "a,b,c,d,e";   // Строка
txt.split(",");          // Разделение по запятым
txt.split(" ");          // Разделение по пробелам
txt.split("|");          // Разделение по вертикальной черте

Если разделитель не указан, то будет возвращен массив, который состоит из одного элемента — исходной строки, расположенной по индексу [0].

Если в качестве разделителя указана пустая строка "", то будет возвращен массив, в котором строка разделена посимвольно:


var txt = "Hello";       // Строка
txt.split("");           // Разделение по символам