JavaScript: методы работы со строками

Когда пишешь JavaScript, очень часто приходится лазить по интернету в поисках информации о синтаксисе и параметрах для методов, работающих со строками.

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

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

 

Конвертирование в String

Вы можете конвертировать число, булево выражение или объект в строку:

var myNumber = 24; // 24
var myString = myNumber.toString(); // "24"

Вы можете сделать это так же с помощью String():

var myNumber = 24; // 24
var myString = String(myNumber); // "24"

Если вы не уверены, что значение не является null или undefined, вы можете использовать String(), которая всегда возвращает строку, независимо от типа значения.

 

Разделение строки в подстроки

Чтобы разделить строки в массив подстрок, вы можете использовать метод split():

var myString = "coming,apart,at,the,commas";
var substringArray = myString.split(","); // ["coming", "apart", "at", "the", "commas"]
var arrayLimited = myString.split(",", 3); // ["coming", "apart", "at"]

Как видно в последней строке, второй параметр функции — это лимит количества элементов, которое будет в итоговом массиве.

 

Получение длины строки

Чтобы найти, сколько символов в строки, мы используем свойство length:

var myString = "You're quite a character.";
var stringLength = myString.length; // 25

 

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

Есть два метода для поиска подстроки:

Использование indexOf():

var stringOne = "Johnny Waldo Harrison Waldo";
var wheresWaldo = stringOne.indexOf("Waldo"); // 7

indexOf() метод начинает поиск подстроки с начала строки, и возвращает позицию начала первого вхождения подстроки. В данном случае — 7 позиция.

Использование lastIndexOf():

var stringOne = "Johnny Waldo Harrison Waldo";
var wheresWaldo = stringOne.lastIndexOf("Waldo"); // 22

Метод возвращает начальную позицию последнего вхождения подстроки в строку.

В обоих методах, если подстрока не найдена, возвращается значение -1, и оба принимают необязательный второй аргумент, указывающий положение в строке, где вы хотите начать поиск. Таким образом, если второй аргумент «5», indexOf() начинает поиск с 5 символа, игнорируя символы 0-4, в то время как lastIndexOf() начинает поиск с символа 5 и идет в обратном направлении, игнорируя символы 6 и дальше.

 

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

Чтобы заменить вхождение подстроки в строке на другую подстроку, вы можете использовать replace():

var slugger = "Josh Hamilton";
var betterSlugger = slugger.replace("h Hamilton", "e Bautista");
console.log(betterSlugger); // "Jose Bautista"

Первый аргумент — то, что вы хотите заменить и второй аргумент — новая строка. Функция заменяет только первое вхождение подстроки в строку.

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

var myString = "She sells automotive shells on the automotive shore";
var newString = myString.replace(/automotive/g, "sea");
console.log(newString); // "She sells sea shells on the sea shore"

Второй аргумент может включать специальный шаблон или функцию. Подробней можно почитать здесь.

 

Получить символ по заданной позиции в строке

Получить символ мы можем с помощью функции charAt():

var myString = "Birds of a Feather";
var whatsAtSeven = myString.charAt(7); // "f"

Как часто бывает в JavaScript, первая позиция в строке начинается с 0, а не с 1.

В качестве альтернативной функции можно использовать charCodeAt() функцию, которая код символа.

var myString = "Birds of a Feather";
var whatsAtSeven = myString.charCodeAt(7); // "102"
var whatsAtEleven = myString.charCodeAt(11); // "70"

Заметьте, что код для символа «F» (11 позиция) другой, нежели у символа «f» (позиция 7).

 

Соединение строк

В большинстве случаем, чтобы соединить строки, можно использовать оператор «+». Но так же можно использовать метод concat():

var stringOne = "Knibb High football ";
var stringTwo = stringOne.concat("rules."); // "Knibb High football rules"

Таким способом мы можем соединить множество строк в одну в том порядке, в котором они записаны:

var stringOne = "Knibb ";
var stringTwo = "High ";
var stringThree = "football ";
var stringFour = "rules.";
var finalString = stringOne.concat(stringTwo, stringThree, stringFour);
console.log(finalString); // "Knibb high football rules."

 

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

Есть 3 способа получения строки из части другой строки:

Используя slice():

var stringOne = "abcdefghijklmnopqrstuvwxyz";
var stringTwo = stringOne.slice(5, 10); // "fghij"

Используя substring():

var stringOne = "abcdefghijklmnopqrstuvwxyz";
var stringTwo = stringOne.substring(5, 10); // "fghij"

В обеих функция первый параметр — символ, с которого начинает подстрока (начиная с 0 позиции) и второй аргумент (необязательный) — позиция символа, до которого возвращается подстрока. В примере (5, 10) возвращается строка между позицией 5 и 9.

Используя substr():

var stringOne = "abcdefghijklmnopqrstuvwxyz";
var stringTwo = stringOne.substr(5, 10); // "fghijklmno"
Первый аргумент — позиция символа, с которого начинается новая строка и второй аргумент — количество символов от начальной позиции новой строки. Т.е. (5, 10) возвращает 10 символов, начиная с 5 позиции.

 

Перевод строки в верхний или нижний регистр.

Есть 4 метода для перевода. Первые 2 переводят строку в верхний регистр:
var stringOne = "Speak up, I can't hear you.";
var stringTwo = stringOne.toLocaleUpperCase(); // "SPEAK UP, I CAN'T HEAR YOU"
var stringThree = stringOne.toUpperCase(); // "SPEAK UP, I CAN'T HEAR YOU"

Другие 2 переводят строку в нижний регистр:

var stringOne = "YOU DON'T HAVE TO YELL";
var stringTwo = stringOne.toLocaleLowerCase(); // "you don't have to yell"
var stringThree = stringOne.toLowerCase(); // "you don't have to yell"

Лучше использовать «locale» методы, т.к. в разных местах, например, в Турции отображение регистров работает не совсем так, как мы привыкли и поэтому результат может быть тот, который мы хотели. Если использовать «locale» методы, то таких проблем не будет.

Ссылка MDN

 

Pattern Matching

Соответствие по шаблону в строке может быть использовано с помощью 2-х методов, которые работают по-разному.

Метод match() применяется к строке и он принимает в качестве параметра регулярное выражение:

var myString = "How much wood could a wood chuck chuck";
var myPattern = /.ood/;
var myResult = myString.match(myPattern); // ["wood"]
var patternLocation = myResult.index; // 9
var originalString = myResult.input // "How much wood could a wood chuck chuck"

Метод exec() применяется к объекту регулярного выражения и принимает в качестве параметра строку:

var myString = "How much wood could a wood chuck chuck";
var myPattern = /.huck/;
var myResult = myPattern.exec(myString); // ["chuck"]
var patternLocation = myResult.index; // 27
var originalString = myResult.input // "How much wood could a wood chuck chuck"

В обоих методах возвращается лишь первое совпадение. Если совпадений не было   — возвращается null.

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

var myString = "Assume";
var patternLocation = myString.search(/ume/); // 3

Если совпадений не было — возращается «-1«.

 

Сравнение двух строк для сортировки

Вы можете сравнить 2 строки, чтобы определить, какая их них идет первая по алфавиту. Для этого воспользуемся методом localeCompare(), который возвращает 3 возможных значения:

var myString = "chicken";
var myStringTwo = "egg";
var whichCameFirst = myString.localeCompare(myStringTwo); // -1 (Chrome returns -2)
whichCameFirst = myString.localeCompare("chicken"); // 0
whichCameFirst = myString.localeCompare("apple"); // 1 (Chrome returns 2)

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

Для проверки возвращаемого значения лучше использовать if ( result < 0 ), чем if ( result === -1 ). Последнее не будет работать в Chrome.

 

И напоследок несколько интересных ссылок:  Строки MDN, строковые объекты.

 

Спасибо за внимание, надеюсь, что вы узнали много нового и интересного!

 

Автор статьи: Alex. Категория: JavaScript
Дата публикации: 19.03.2013