JavaScript | Как удалить последний символ в строке?

Есть строка:

var stroka = "Subaru/"

Нам нужно удалить из этой строки последний символ косой линии «/». Как это сделать?

 

Видео на русском языке

В видеоролике показаны два способа удаления последнего символа строки. Все команды пишутся напрямую в консоль браузера Google Chrome.

 

Решение № 1 — Через метод slice()

Воспользуемся методом slice(), который наследуется нашим экземпляром строки от объекта -прототипа String.

String.prototype.slice ( start, end )

Метод slice() принимает два аргумента, start и end, и возвращает подстроку результата преобразования этого объекта в String, начиная с начала индекса start и до конца индекса end, но не включая его (или до конца String, если end является undefined). Если start отрицательный, он обрабатывается как sourceLength + start, где sourceLength — длина строки. Если end отрицательный, он обрабатывается как sourceLength + end, где sourceLength — длина строки. Результатом является значение String, а не объект String.

Команда по удалению последнего символа строки:

stroka.slice(0, -1)

Мы передали два параметра в метод slice(). В первый параметр start мы передали числовое значение «0» — это индекс первого элемента строки с которого мы начнём нарезание на кусочки («кусочничать»). Во второй параметр end мы передали числовое значение «-1«.

Удалили последний элемент из строки - JavaScript
Удалили последний элемент из строки — JavaScript

Так как второй параметр end отрицательный, то применилось правило (sourceLength + end).

В нашем случае (stroka.length + (-1)). Это (7 — 1) = 6. Таким образом второй параметр end стал равен 6.

Символ косой линии на конце строки - JavaScript
Символ косой линии на конце строки — JavaScript

Под индексом 6 в нашей исходной строке находится косая линия, но метод slice() не включит её в итоговую строку. Индекс 6 не попадёт в итоговый результат по правилу работы метода slice().

ВАЖНО! Метод slice() возвращает новую строку. Это значит, что оригинальная строка на которой вызывается метод slice() не изменяется.

Свой метод

Можно расширить стандартный набор методов языка JavaScript для объектов-прототипов String и написать свой собственный.

String.prototype.delOneLast = function () {
   return this.slice(0, -1)
}

Теперь можно протестировать вызов метода delOneLast() на разных строках:

Свой метод delOneLast для строк - JavaScript
Свой метод delOneLast для строк — JavaScript

 

Способ № 2 — метод replace() и регулярное выражение

Можно воспользоваться регулярными выражениями и произвести сопоставление строки по последнему символу этой самой строки.

var stroka = "Subaru/"
stroka.replace(/.$/,"")
"Subaru"

Как это работает?

Метод replace() всегда принимает два параметра:

  1. searchValue — значение для поиска
  2. replaceValue — значение для замены

Первым параметром мы передадим регулярное выражение. Литеральное объявление регулярного выражения в JavaScript обозначается двумя косыми линиями / /. Между этими линиями записывается конструкция сопоставления — шаблон регулярного выражения (pattern).

У шаблона достаточно большой синтаксис по оформлению, но в нашем случае достаточно знать два производства:

  1. Утверждения (Assertion)
  2. Атомы (Atom)

Знак доллара $ принадлежит утверждению № 2 и означает правую границу строки.

Знак точки . принадлежит атому № 2 и означает один какой-то любой символ.

Вторым параметром мы передаём пустую строку. Мы меняем найденное на пустую строку. По смыслу происходит удаление, хотя по факту это операция замены.

Результат:

Метод replace и регулярное выражение - JavaScript
Метод replace и регулярное выражение — JavaScript

Когда мы закинем в первый параметр метода replace() это регулярное выражение, тогда в строке будет найден символ «/» и заменён на «ничего». То есть метод replace() вернёт нам новую строку без последнего символа.

 

Метод exec() для регулярного выражения

Можно провести сопоставление шаблона регулярного выражения по исходной строке.

/.$/.exec("Subaru/")

Такое сопоставление по строке возвращает нам массив. Это не обычный массив. В нём есть строковые свойства.

Регулярное выражение нашло последной символ строки - JavaScript
Регулярное выражение нашло последной символ строки — JavaScript

Что нас интересует в этом массиве?

  1. Значения свойств, которые обозначаются целочисленными индексами.
  2. Значение свойства «index»

В данном случае значение под свойством «index» равно числу 6 (шесть). Это индекс позиции символа, подходящего под сопоставление шаблона регулярного выражения. Этим значением является косая линия.

 

Дополнительно

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

 

Как удалить последние 5 (пять) символов строки?

"кораблик".slice(0,-5)
"кор"

"кораблик".replace(/.{5}$/,"")
"кор"
Удалили последние 5 символов в строке - JavaScript
Удалили последние 5 символов в строке — JavaScript

 

Информационные ссылки

Стандарт ECMAScript — Раздел «22.1.4 Properties of String Instances» — https://tc39.es/ecma262/#sec-properties-of-string-instances

Как удалить первый символ в строке?

JavaScript | Строки (String)

Официальная страница стандарта ECMAScript — Объект Stringhttps://tc39.es/ecma262/#sec-string-objects

Метод slice()https://tc39.es/ecma262/#sec-string.prototype.slice

Поделись записью