Есть строка:
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«.
Так как второй параметр end отрицательный, то применилось правило (sourceLength + end).
В нашем случае (stroka.length + (-1)). Это (7 — 1) = 6. Таким образом второй параметр end стал равен 6.
Под индексом 6 в нашей исходной строке находится косая линия, но метод slice()
не включит её в итоговую строку. Индекс 6 не попадёт в итоговый результат по правилу работы метода slice()
.
ВАЖНО! Метод slice()
возвращает новую строку. Это значит, что оригинальная строка на которой вызывается метод slice()
не изменяется.
Свой метод
Можно расширить стандартный набор методов языка JavaScript для объектов-прототипов String и написать свой собственный.
String.prototype.delOneLast = function () { return this.slice(0, -1) }
Теперь можно протестировать вызов метода delOneLast() на разных строках:
Способ № 2 — метод replace() и регулярное выражение
Можно воспользоваться регулярными выражениями и произвести сопоставление строки по последнему символу этой самой строки.
var stroka = "Subaru/" stroka.replace(/.$/,"") "Subaru"
Как это работает?
Метод replace()
всегда принимает два параметра:
- searchValue — значение для поиска
- replaceValue — значение для замены
Первым параметром мы передадим регулярное выражение. Литеральное объявление регулярного выражения в JavaScript обозначается двумя косыми линиями / /. Между этими линиями записывается конструкция сопоставления — шаблон регулярного выражения (pattern).
У шаблона достаточно большой синтаксис по оформлению, но в нашем случае достаточно знать два производства:
- Утверждения (Assertion)
- Атомы (Atom)
Знак доллара $ принадлежит утверждению № 2 и означает правую границу строки.
Знак точки . принадлежит атому № 2 и означает один какой-то любой символ.
Вторым параметром мы передаём пустую строку. Мы меняем найденное на пустую строку. По смыслу происходит удаление, хотя по факту это операция замены.
Результат:
Когда мы закинем в первый параметр метода replace()
это регулярное выражение, тогда в строке будет найден символ «/» и заменён на «ничего». То есть метод replace()
вернёт нам новую строку без последнего символа.
Метод exec() для регулярного выражения
Можно провести сопоставление шаблона регулярного выражения по исходной строке.
/.$/.exec("Subaru/")
Такое сопоставление по строке возвращает нам массив. Это не обычный массив. В нём есть строковые свойства.
Что нас интересует в этом массиве?
- Значения свойств, которые обозначаются целочисленными индексами.
- Значение свойства «index»
В данном случае значение под свойством «index» равно числу 6 (шесть). Это индекс позиции символа, подходящего под сопоставление шаблона регулярного выражения. Этим значением является косая линия.
Дополнительно
У любых экземпляров строк имеется свойство «length«. Оно возвращает количество символов в этой строке. К сожалению, его нельзя изменить на подобии свойства «length» как у массивов. Попытка уменьшения длины строки не повлияет на удаление конечных символов.
Как удалить последние 5 (пять) символов строки?
"кораблик".slice(0,-5) "кор" "кораблик".replace(/.{5}$/,"") "кор"
Информационные ссылки
Стандарт ECMAScript — Раздел «22.1.4 Properties of String Instances» — https://tc39.es/ecma262/#sec-properties-of-string-instances
Как удалить первый символ в строке?
Официальная страница стандарта ECMAScript — Объект String — https://tc39.es/ecma262/#sec-string-objects
Метод slice() — https://tc39.es/ecma262/#sec-string.prototype.slice