В этом руководстве вы узнаете о типе JavaScript String
и о том, как эффективно манипулировать строками.
Тип данных является оболочкой объекта примитивного типа string и может быть создан с помощью конструктора следующим образом:
let str = new String('JavaScript String Type');
Тип String
имеет свойство length
, которое определяет количество символов в строке.
console.log(str.length); // 22
В этом примере значение свойства length
равно 22
, что также является количеством символов в строке ‘JavaScript String Type’.
Чтобы получить значение примитивной строки, вы используете один из следующих методов объекта String: valueOf(),
toString(),
и toLocaleString().
console.log(str.valueOf()); console.log(str.toString()); console.log(str.toLocaleString());
Чтобы получить доступ к отдельному символу в строке, используйте нотацию с квадратными скобками []
с числовым индексом. Индекс первого символа равен нулю, как показано в этом примере:
console.log(str[0]); // J
Обозначение квадратных скобок было введено в ES5. До ES5 использовали метод charAt()
, который является более подробным:
console.log(str.charAt(0)); // J
Когда вы вызываете метод для примитивной строковой переменной или литеральной строки, он преобразуется в экземпляр типа String
. Например:
'literal string'.toUpperCase();
Эта функция известна как примитивные типы-оболочки в JavaScript.
Манипуляции со строками
Тип String
предоставляет множество полезных методов для эффективного управления строками. Мы рассмотрим каждый из них в следующем разделе.
1) Объединение строк
Чтобы объединить две или более строки, используйте метод concat() следующим образом:
let firstName = 'John'; let fullName = firstName.concat(' ','Doe'); console.log(fullName); // "John Doe" console.log(firstName); // "John"
Метод concat()
объединяет две или более строк и возвращает результирующую строку. Обратите внимание, что метод concat()
не изменяет исходную строку.
Помимо метода concat()
, вы также можете использовать оператор сложения( +
) для объединения строк. На практике оператор сложения используется чаще, чем метод concat()
.
let firstName = 'John'; let fullName = firstName + ' ' + 'Doe'; console.log(fullName); // "John Doe"
2) Извлечение подстрок
Чтобы извлечь подстроку из строки, вы используете метод substr() :
substr(startIndex,[length]);
Метод substr()
принимает два аргумента.
Первый аргумент startIndex
— это местоположение, в котором извлекаются символы, а length
второго аргумента указывает количество символов для извлечения.
let str = "JavaScript String"; console.log(str.substr(0, 10)); // "JavaScript" console.log(str.substr(11,6)); // "String"
Если вы опустите аргумент length
, метод substr()
извлечет символы в конец строки.
Иногда вы хотите извлечь подстроку из строки, используя начальный и конечный индексы. В этом случае вы используете метод substring()
:
substring(startIndex,endIndex)
Пример:
let str = "JavaScript String"; console.log(str.substring(4, 10)); // "Script"
3) Поиск подстрок
Чтобы найти подстроку в строке, используйте метод indexOf():
string.indexOf(substring,[fromIndex]);
Метод indexOf()
принимает два аргумента: подстроку для поиска и fromIndex
, с которого метод начинает поиск в строке вперед.
indexOf()
возвращает индекс первого вхождения подстроки в строку. Если подстрока не найдена, метод indexOf()
возвращает -1
.
let str = "This is a string"; console.log(str.indexOf("is")); // 2
В следующем примере используется аргумент fromIndex
:
console.log(str.indexOf('is', 3)); //5
Чтобы найти местоположение последнего вхождения подстроки в строку, вы используете метод lastIndexOf()
.
string.lastIndexOf(substring,[fromIndex])
В отличие от indexOf()
, метод lastindexOf() выполняет поиск в обратном направлении от аргумента fromIndex
.
console.log(str.lastIndexOf('is')); // 5
Метод lastIndexOf()
также возвращает -1
, если подстрока не найдена в строке, как показано в этом примере:
console.log(str.lastIndexOf('are')); // -1
4) Удаление пробельных символов
Чтобы удалить все начальные и конечные пробельные символы строки, используйте метод trim()
.
let rawString = ' Hi '; let strippedString = rawString.trim(); console.log(strippedString); // "Hi"
Обратите внимание, что метод trim()
создает копию исходной строки с удаленными пробелами, он не изменяет исходную строку.
ES6 представил два новых метода удаления пробельных символов из строки:
trimStart()
возвращает строку с удаленными пробелами в начале строки.trimEnd()
возвращает строку с удаленным пробелом в конце строки.
5) Изменение регистра
Чтобы изменить регистр строки, используйте toLowerCase()
и toUpperCase()
:
let greeting = 'Hello'; console.log(greeting.toLowerCase()); // 'hello' console.log(greeting.toUpperCase()); // 'HELLO';
В некоторых языках правила преобразования строки в нижний и верхний регистр очень специфичны.
Поэтому безопаснее использовать toLocaleLowerCase()
и toLocaleUpperCase()
, особенно если вы не знаете, с каким языком будет работать код.
6) Сравнение строк
Чтобы сравнить две строки, используйте метод localeCompare()
:
first.localeCompare(second);
localeCompare()
возвращает одно из трех значений: -1, 0 и 1.
- Если первая строка идет перед второй строкой в алфавитном порядке, метод возвращает -1.
- Если первая строка идет после второй строки в алфавитном порядке, метод возвращает 1.
- Если две строки равны, метод возвращает 0.
Например:
console.log('A'.localeCompare('B')); // -1 console.log('B'.localeCompare('B')); // 0 console.log('C'.localeCompare('B')); // 1
7) Сопоставление шаблонов
Метод match() позволяет сопоставить строку с указанным регулярным выражением и получить массив результатов.
Метод match()
возвращает null, если совпадений не найдено. В противном случае он возвращает массив, содержащий полное совпадение и все совпадающие результаты захвата скобок.
Если глобальный флаг( g
) не установлен, нулевой элемент массива содержит все совпадение. Вот пример:
let expression = '1 + 2 = 3'; let matches = expression.match(/\d+/); console.log(matches[0]); // "1"
Выход:
1
В этом примере шаблон соответствует любому числу в строке expression
.
В случае, если глобальный флаг( g
) установлен, элементы результирующего массива содержат все совпадения следующим образом:
let expression = '1 + 2 = 3'; let matches = expression.match(/\d+/g); for(const match of matches) { console.log(match); }
Выход:
1 2 3
В этом примере массив matches
содержит все совпадения, включая 1
, 2
и 3
в строке expression
.
Если вам нужно только узнать, соответствует ли строка регулярному выражению, используйте вместо этого метод search()
.
Подобно методу match()
, метод search()
принимает регулярное выражение и возвращает позицию строки, в которой найдено первое совпадение. Если совпадений не найдено, возвращается -1.
let str = "This is a test of search()"; let pos = str.search(/is/); console.log(pos); // 2
8) Замена подстрок
Чтобы заменить подстроку в строке, используйте метод replace().
string.replace(regularExpression, replaceText)
Первым аргументом метода replace()
может быть регулярное выражение или строка. Если это регулярное выражение, метод найдет совпадения и заменит их вторым аргументом( replaceText
). Если это строка, метод выполнит точный поиск и внесет замену.
replace()
возвращает копию исходной строки после замены.
В следующем примере показано, как использовать регулярное выражение для a
the
:
let str = "the baby kicks the ball"; // replace "the" with "a" let newStr = str.replace(/the/g, "a"); console.log(newStr); // "a baby kicks a ball" console.log(str); // "the baby kicks the ball"
А в следующем примере показано, как заменить kicks
на holds
, используя первый аргумент в виде буквальной строки.
newStr = str.replace('kicks', 'holds'); console.log(newStr); // "the baby holds the ball"