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 ));


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