Индексация, разделение и управление строками в JavaScript

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

В этом мануале вы узнаете, как индексируются строки, как обращаться к символам в строке, а также об общих свойствах и методах строк.

Строковые примитивы и объекты String

В JavaScript существует два типа строк. JavaScript различает строковый примитив (неизменный тип данных) и объект String.

Чтобы понять разницу между ними, инициализируйте строковый примитив и объект String.

// Initializing a new string primitive
const stringPrimitive = "A new string.";
// Initializing a new String object
const stringObject = new String("A new string.");

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

typeof stringPrimitive;
string

Во втором случае с помощью new String() был создан объект и присвоен переменной.

typeof stringObject;
object

В основном используются примитивы строк. JavaScript может использовать встроенные свойства и методы оболочки объекта String, не изменяя строковый примитив в объекте.

Вы должны знать различие между примитивами и объектами, хотя сначала понять ее сложно. По сути, существуют методы и свойства, доступные для всех строк, и в фоновом режиме JavaScript будет выполнять преобразование в объект и обратно в примитив каждый раз, когда вызывается метод или свойство.

Индексация строк

Каждый символ в строке имеет свой индексный номер. Отсчет начинается с 0.

Для примера создайте строку How are you?.

H o w a r e y o u ?
0 1 2 3 4 5 6 7 8 9 10 11

Первый символ строки получает индекс 0, последний символ (?) имеет индекс 11. Пробелы также индексируются (3 и 7 в данном случае).

Возможность доступа к каждому символу в строке открывает несколько способов работы со строками.

Доступ к символам

Рассмотрим эту функцию на примере строки:

"How are you?";

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

"How are you?"[5];
r

Также запросить символ по индексу можно с помощью метода charAt(). Номер индекса передается в качестве параметра.

"How are you?".charAt(5);
r

Чтобы узнать индекс того или иного символа в строке, передайте его в качестве параметра методу indexOf().

"How are you?".indexOf("o");
1

Хотя символ о появляется в строке дважды, метод возвращает индекс первого экземпляра.

lastIndexOf() выдает индекс последнего экземпляра запрашиваемого символа.

"How are you?".lastIndexOf("o");
9

Оба эти метода могут искать несколько символов в строке. Метод вернет индекс первого символа этой последовательности.

"How are you?".indexOf("are");
4

Метод slice() возвращает символы между двумя заданными номерами индексов. Первым параметром будет номер первого индекса, а второй параметр будет номером последнего индекса.

"How are you?".slice(8, 11);
you

Обратите внимание: 11 – индекс символа «?», который не появился в результате. Дело в том, что slice() выводит первый параметр включительно, а второй – исключительно.

Если второй параметр не указан, этот метод выведет все символы после указанного индекса.

"How are you?".slice(8);
you?

Итак, charAt () и slice ()возвращают строковые значения по индексу, а indexOf () и lastIndexOf () — наоборот, возвращают индекс по символу.

Длина строки

Свойство length возвращает количество символов в строке.

"How are you?".length;
12

Помните, что свойство length возвращает фактическое количество символов, начиная отсчет с 1, а не с 0, как при индексации.

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

Встроенные методы toUpperCase() и toLowerCase()позволяют форматировать текст в JavaScript.

Метод toUpperCase() преобразует все символы в верхний регистр.

"How are you?".toUpperCase();
HOW ARE YOU?

Метод toLowerCase() преобразует все символы в символы нижнего регистра.

"How are you?".toLowerCase();
how are you?

Они не принимают дополнительных параметров.

Стоит отметить, что эти методы не меняют исходную строку.

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

В JavaScript есть очень полезный метод для разделения строки символом и создания новых массивов из полученных разделов. Используйте метод split() для разделения массива символом пробела.

const originalString = "How are you?";
// Split string by whitespace character
const splitString = originalString.split(" ");
console.log(splitString);
[ 'How', 'are', 'you?' ]

У вас есть новый массив в переменной splitString, и теперь вы можете получить доступ к каждой секции по индексу.

splitString[1];
are

Без параметров split () создаст массив, разделенный запятыми, поместив каждый символ в строку.

Этот метод позволяет посчитать слова в предложении. Также с его помощью программа может отличить имя от фамилии.

Удаление крайних пробелов

Метод trim() удаляет крайние пробелы в строках.

const tooMuchWhitespace = "     How are you?     ";
const trimmed = tooMuchWhitespace.trim();
console.log(trimmed);
How are you?

С помощью метода trim() можно быстро удалить избыточные пробелы в начале и конце строки.

Поиск и замена значений строки

Найти значение в строке и заменить его новым значением можно с помощью метода replace(). Первым параметром будет искомое значение, а вторым – значение, на которое нужно его заменить.

const originalString = "How are you?"
// Replace the first instance of "How" with "Where"
const newString = originalString.replace("How", "Where");
console.log(newString);
Where are you?

Этот метод можно комбинировать с регулярными выражениями. К примеру, replace() работает с первым найденным экземпляром искомого значения. Флаг g (global) позволит методу работать со всеми экземплярами в строке, а флаг i отключает чувствительность к регистру.

const originalString = "Javascript is a programming language. I'm learning javascript."
// Search string for "javascript" and replace with "JavaScript"
const newString = originalString.replace(/javascript/gi, "JavaScript");
console.log(newString);
JavaScript is a programming language. I'm learning JavaScript.

Читайте также:

Заключение

Строки – самый распространенный тип данных. Они поддерживают много функций.

Теперь вы знаете разницу между строковыми примитивами и объектами String, понимаете, как индексируются строки и как применять встроенные методы для работы с ними.

Читайте также: Работа со строками в JavaScript

Tags: