Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отрезать от строки последний символ и полуичть его (https://javascript.ru/forum/misc/24585-otrezat-ot-stroki-poslednijj-simvol-i-poluicht-ego.html)

Livaanderiamarum 06.01.2012 19:08

Отрезать от строки последний символ и полуичть его
 
есть ли спциальная функция для этого?

Octane 06.01.2012 19:16

substr(-1)

Livaanderiamarum 06.01.2012 19:19

Цитата:

Сообщение от Octane (Сообщение 148416)
substr(-1)

var q = '1234'
q.substr(-1)
log(q)//1234 четверка не исчезла


а

var q = '1234'
Array.protoype.pop.call(q)
букву возвращает но не удаляет её из оригинала

nerv_ 06.01.2012 19:22

alert("string".slice(-1)); // g. Не меняет строку
alert("string".substr(-1)); // FF8 - g, IE8 - string

Octane 06.01.2012 19:22

Цитата:

Сообщение от Livaanderiamarum
Отрезать от строки последний символ и полуичть его

Ты уж определись, написал получить последний символ, а не то, что осталось от строки.
alert("1234".slice(0, -1))

Livaanderiamarum 06.01.2012 19:29

Цитата:

Сообщение от Octane
Ты уж определись,

заголовок темы прочитай

Livaanderiamarum 06.01.2012 19:30

Хорошо, скажу про другому, есть у строг аналог pop у массивов?

nerv_ 06.01.2012 19:30

немного извращенный вариант
var x = "string", z;
x = x.replace(/[\S\s]$/, function(f) { z = f; return ""});
alert(x + "\n" + z);

Octane 06.01.2012 19:33

Деструктивного (или как они там называются) аналога метода pop нету, исходная строка не изменится

Livaanderiamarum 06.01.2012 19:33

Значит придется по некрасивому

var q = '1234'
var w =	q[q.length-1]
q = q.slice(0, -1)
alert(q)
alert(w)

Livaanderiamarum 06.01.2012 19:34

Цитата:

Сообщение от Octane (Сообщение 148425)
Деструктивного (или как они там называются) аналога метода pop нету

ну как обычно, js такой js? но мне нравится что в нем мало функций лишних, все что нужно можно сделать самому.

Aetae 07.01.2012 03:20

Цитата:

Сообщение от nerv_ (Сообщение 148424)
немного извращенный вариант
var x = "string", z;
x = x.replace(/[\S\s]$/, function(f) { z = f; return ""});
alert(x + "\n" + z);

немного извращенный вариант:
var x = "string";
x = x.split(/(?=[\S\s]$)/);
alert(x[0]+' | '+x[1]);

=)

nerv_ 07.01.2012 11:35

Aetae, клево. Спасибо) Я тоже хотел записать через split, но условие реги сформировать не получилось :( Можно попросить Вас дать небольшой комментарий по коду?
// 1. x(?=y) Находит x, только если за x следует y. При этом x у Вас не указан.
// 2. Строка бьется по separator, при разбивании separator пропадает. Но (я так понял), поскольку он (x) не указан, то пропадать там не чему.
// 3. А можно записать условие без этой (?=y) конструкции, с аналогичным результатом работы?
x = x.split(/(?=[\S\s]$)/);


p.s.: видимо, у меня так много вопросов, потому, что еще не дочитал "Дж.Фридл - Регулярные выражения, 3-е изд.[2008].pdf", только на 84 странице :)

Pavel M. 07.01.2012 11:46

можно так

var x = "string";
x = x.match(/(.+)(.$)/);
alert(x[1] + ' | ' + x[2]);

nerv_ 07.01.2012 12:01

Цитата:

Сообщение от Pavel M.
можно так

или так
var x = /(.+)(.$)/.exec("string");
alert(x[1] + ' | ' + x[2]);

Pavel M., спасибо) но меня интересует split :)

Aetae 07.01.2012 12:05

Честно говоря глубокой теоретической подоплёки данный ход не имеет.)
Так я естесно никогда не делал, ибо извращение, но полагаю отсутствие предстоящей строки он воспринимает как пустую строку, а потому работает как надо.)

nerv_ 07.01.2012 13:45

Aetae, и на этом спасибо)

nerv_ 07.01.2012 19:02

в контексте: сейчас читаю Дж.Фридл - Регулярные выражения, 3-е изд.[2008].pdf
Aetae, буквально через 2-3 страницы от того, где я остановился, наткнулся на следующее:
для пояснения:
(?=) - опережающая проверка
(?<=) - ретроспективная проверка
пример в кот. производится поиск: see Jeffs book
задача: заменить Jeffs на Jeff’s

Цитата:

...Получится выражение (?<=\bJeff) (?=s\b) которое читается так: «Найти позицию, перед которой находится текст ‘Jeff’, а после которой находится текст ‘s’.» Результат получается весьма любопытным. Регулярное выражение вообще не совпадает ни с каким текстом – оно совпадает с позицией, в которой мы хотим вставить апостроф. Найденное «ничто» в этой позиции заменяется апострофом.

Так что получается Kolyaj прав был, когда говорил (цитата из другой темы)
Цитата:

Сообщение от Kolyaj
После прочтения половины книги вопросов по регулярным выражениям не возникает никогда. Вторая половина там про внутренности движков.


Livaanderiamarum 07.01.2012 19:04

Кто придумал регулярки,) ? что эт за существо)?

Aetae 07.01.2012 19:20

Цитата:

Сообщение от Livaanderiamarum (Сообщение 148650)
Кто придумал регулярки,) ? что эт за существо)?

Стивен Коул Клейни


Часовой пояс GMT +3, время: 19:52.