Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как получить substr в обратную сторону ? (https://javascript.ru/forum/misc/30372-kak-poluchit-substr-v-obratnuyu-storonu.html)

mitiya 02.08.2012 12:32

как получить substr в обратную сторону ?
 
у меня есть текст и мне нужно получить его кусок , но я знаю позицию конца куска и его размер. как бы мне его получить.

вот типа такого

text = '123456789';

alert(text.substr(4, 3));

чтоб вывод был не 567 , а 345 .

nerv_ 02.08.2012 12:41

http://javascript.ru/String/slice

Aetae 02.08.2012 12:42

text.substr(4-3, 3)
=)

Цитата:

Сообщение от nerv_ (Сообщение 193902)

Я тоже об этом сначала подумал, но это не то, что опу надо, прочитайте пост внимательнее.)

dmitriymar 02.08.2012 12:45

поиск по форуму работает и гугл тоже
http://javascript.ru/forum/study/216...ut-stroku.html

Да , потом вчитался в то что он хочет, хоть слова бы правильные использовал
-получить участок строки , но уж точно не получить в обратную сторону
Цитата:

Сообщение от mitiya
но я знаю позицию конца куска и его размер.

-судя по всему нет))

Deff 02.08.2012 14:11

Получаем подстроку предшествующую данной (той же длины) ,
Первый символ искомой подстроки и последний текущей, входят в обе последовательности
<script type="text/javascript">
text = '123456789';

function PreSubStr(text,st0,Sublen){

   alert('Исходная : \n\n'+text.substr(st0, Sublen));
   var start = 1 + st0 - Sublen; 
   if(start < 1-Sublen) return false;
   if(start < 0)   return text.substr(0, 1 + st0 )
   return text.substr(start,Sublen);

} alert('Искомое: \n\n'+PreSubStr(text,4,3))


</script>


<script type="text/javascript">
text = '123456789';

function PreSubStr(text,st0,Sublen){

   alert('Исходная : \n\n'+text.substr(st0, Sublen));
   var start = 1 + st0 - Sublen; 
   if(start < 1-Sublen) return false;
   if(start < 0)  return text.substr(0, 1 + st0 );
   return text.substr(start,Sublen);

} alert('Искомое: \n\n'+PreSubStr(text,1,3))


</script>

Aetae 02.08.2012 14:49

Лол, получается я тоже его не понял.=)
Ну тогда так(зачем лишний раз вычислять длину?):
String.prototype.rsubstr = function( pos , len){
    return this.slice(-pos - len, -pos)
} 
text = '123456789';
alert(text.substr(4, 3));
alert(text.rsubstr(4,3))

Deff 02.08.2012 14:56

Aetae,
Да мну собственно максимум усилий на формулировку - код правил - как удалось выразить мысля

Aetae 02.08.2012 15:06

Зачем поправиль, слющай, а?
Был же рабочий вариант, а сейчас просто подоогнанный под задачу:
text = '123456789';
function PreSubStr(text,st0,Sublen){
 
   var start = 1 + st0 - Sublen;
   if(start < 0) return false;
   return text.substr(start,Sublen);
 
} 
alert('Должно быть: 567 \n\nРезультат: '+PreSubStr(text,2,3))

Deff 02.08.2012 15:09

Хм...
Тогда имхо моя формулировка не верна ?

Прост если подстрока к началу ближе её длины - то полного(а иногда и частичного результата - не вернуть) поставил false
====================================
Исправил возврат, если в наличии хоть кусок подстроки от начала

devote 02.08.2012 16:04

а чем substring не угодил? у него же параметры
string.substring(from, to)
в отличии от:
string.substr(from, length)

то есть простое:
var text = '123456789';
var startAt = 4; // откуда начать
var count = 3; // скока вырезать
alert(text.substring( startAt + 1, startAt - count + 1 ));

devote 02.08.2012 16:39

Цитата:

Сообщение от Maxmaxmахimus
как вообще этот топик собрал больше 2 постов??

потому что такие как ты не умеют читать текст в топиках... четко написано, есть два числа, 4 начальная позиция, 3 длинна... в итоге из строки 123456789 должны получить 345, в твоем примере это выглядит черт знает как. То есть если выставить те числа что указал ТС в твоем примере, получим вот такую хрень:
q = '123456789';
 
end = 4;
lenght = 3;
 
alert( q.substr(end-lenght, lenght ) ); // 234 а должно быть 345

zebra 02.08.2012 16:43

Так и в примере devote ошибка :)

devote 02.08.2012 16:44

Цитата:

Сообщение от Maxmaxmахimus
разговор окончен

дело конечно твое. но решение твое не правильное.

devote 02.08.2012 16:44

Цитата:

Сообщение от zebra
Так и в примере devote ошибка

где?

devote 02.08.2012 16:46

Цитата:

Сообщение от Maxmaxmахimus
ты тупой или притворяешься?

объясни мою тупость

zebra 02.08.2012 16:46

devote,
234 в результате, а надо 345

devote 02.08.2012 16:49

Цитата:

Сообщение от zebra
devote,
234 в результате, а надо 345

я так понимаю ты про топик номер 13 ??? дык это не мой пример, это я показал Maxmaxmахimus, то что его пример с числами указанными ТС'ом он работает не верно, но он этого признать не хочет. А мой вариант в 10'ом посте.

devote 02.08.2012 16:50

Цитата:

Сообщение от Maxmaxmахimus
что известен КОЕНЦ и длинна

ну не спорю, ну я тебе привел пример в 13'ом посте, где конец должен быть цифрой 5 но не как не четверкой.. Тоесть ты не учел того что позиции начинаются с нуля а не с единицы

zebra 02.08.2012 16:50

devote,
Пардон
Тогда Maxmaxmахimus не очень!

devote 02.08.2012 16:59

Цитата:

Сообщение от Maxmaxmахimus
после этого быдлокодеры начали плакаться че то там бред нести..

тоесть себя ты конечно же тоже в эти слова вписал..
Цитата:

Сообщение от Maxmaxmахimus
блять че вы несете??????????

читаем:
Цитата:

Сообщение от mitiya
но я знаю позицию конца куска и его размер

заметь человек пишет, конца КУСКА но НЕ начало следующего за куском символа. Что именно в твоем решении и происходит.. Тоесть позиция 4 так же должна входит в строку которую нужно отрезать.. А не проигнорировать. Как это происходит у тебя.

Вот что я до тебя хочу донести.. а уж кто и что там решил, это и так понятно.. Я лишь альтернативный пример привел. А не писал то что уже писали выше.

Deff 02.08.2012 17:04

Maxmaxmахimus,
:) Тут Вариант ответа - зависит - т где поставить запятушку
Казнить нельзя помиловать..
Тут походу засомневался в свой интерпретации - Aetae походу прав

TheChosenOne777 02.08.2012 17:07

охуеееть..
бурление говн в действии:blink:

Deff 02.08.2012 17:11

вот типа такого

text = '123456789';
 end = 4;
 leng = 3;
 alert(text.substr(end, leng));
 alert(text.substr(end-leng+1, leng))

devote 02.08.2012 17:14

Maxmaxmахimus,
а ты чего без матов жить не можешь? здесь вообще то не только взрослые люди присутствуют, но и дети есть.. Во вторых тебе никто не хамит, а лишь указывают на твою ошибку.. пусть даже и бональную.. И дело даже н в бональной ошибке, а в том что ты никогда не читаешь топики от начала и высказываешь свое решение, которое выше уже кто-то описал.. одним словом копипастишь, и тащишь славу на себя.. Не впервой за тобой подобное наблюдаю..

Дык вот вместо того что бы умничать, прошелся бы для начала по всему топику, посмотрел бы решения других.. а уж потом приводил бы свои примеры... Лично я привел альтернативный пример, и он никак не похож на другие, даже метод использую другой.

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

Deff 02.08.2012 17:28

Maxmaxmахimus,
у меня сын как то спросил - "па- что такое валейневалей" мну в ступоре час был пока не выяснил - чо он читал -

Вот
<b>Всё оказалось просто "волей - не волей"</b>

melky 02.08.2012 17:32

Deff, простите за оффтоп, где он такое прочитал?

Deff 02.08.2012 17:35

Цитата:

Сообщение от melky
Deff, простите за оффтоп, где он такое прочитал?

Оказалось в Сказках Пушкина:

Волей-неволей

mitiya 02.08.2012 21:51

Такой тут форум активный ))

вот самый нормальный вариант разумеется
text = '123456789';
 end = 4;
 leng = 3;
 alert(text.substr(end, leng));
 alert(text.substr(end-leng+1, leng))


стыдно, что сам не увидел. это ж очевидно (

Aetae 03.08.2012 00:10

Мде, подведём итоги.
Изначальный пост автора:
Цитата:

Сообщение от mitiya (Сообщение 193900)
у меня есть текст и мне нужно получить его кусок , но я знаю позицию конца куска и его размер. как бы мне его получить.

вот типа такого

text = '123456789';

alert(text.substr(4, 3));

чтоб вывод был не 567 , а 345 .

Я его рассматривал так: он знает позицию конца куска и его размер; если следовать обычной логике, то позиция конца считается слева, что я и предположил в своём первом посте. Но в таком случае результат будет не 345, а 234. Дале у людей возникло 2 варианта: популярный - подогнать задачу под обычную логику просто добавив отбалды единицу к "месту конца", и мой - попробовать понять логику инопланетян и предположить, что позиция конца также считается с конца, ибо в таком варианте всё сходится, результат - 345.

Автор выбрал первый вариант, на что я могу заключить: не дай бог заказчиков с такими тз.)

Deff 03.08.2012 00:20

Кароче я тоже лоханулся - валейневалей - иногда такое случаецо - интерпретация была первоначально понята неверно - хотя при 10-том прочтении очевидна и однозначна

bes 03.08.2012 00:39

жарко тут у вас :D
Цитата:

Сообщение от Maxmaxmахimus
пиздец все ухожу нахуй с этого форума дегров

Вы как по-отдельности будете уходить или все сразу (Aetae можно оставить) :lol:

melky 03.08.2012 13:54

Цитата:

Сообщение от bes
Вы как по-отдельности будете уходить или все сразу (Aetae можно оставить)

частями, почленно.


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