Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа со строкой, частью URL-а (https://javascript.ru/forum/misc/52051-rabota-so-strokojj-chastyu-url.html)

antropov_web 02.12.2014 03:01

Работа со строкой, частью URL-а
 
Привет.

Есть конец URL-а, строка вида '/photo/.../X-Y-0-0-2'

Где:
/.../ — произвольное количество каталогов, может быть, например, таким: '/album1/' или таким: '/family_photos/my_photos/category2/album4/'
X, Y — произвольные целые числа.

Важны тут именно X и Y. В зависимости от определенных условий их нужно либо заменять другими числами, либо увеличивать на 1 независимо друг от друга. Также их значения нужно хранить в соответствующих им переменных. Конкретных примеров кода нет.

Меня интересуют способы работы с данными X и Y в данной строке.

К сожалению, ничего кроме такого алгоритма действий, придумать не смог:
1. Создать новый массив, разбив строку слэшем '/': ['photos', ..., 'X-Y-0-0-2']
2. Взять последний элемент и создать массив, разбив его дефисом '-': ['X', 'Y', '0', '0', '2']
3. Работать с X и Y как с первым и вторым элементами массива, преобразовав их в числа
4. Собрать обратно по кусочкам исходную строку с новыми X и Y

Может, выше это полный бред, и есть другой простой способ?

Erolast 02.12.2014 04:17

http://javascript.ru/basic/regular-expression

danik.js 02.12.2014 07:37

В первую очередь нужно попытаться вообще избавиться от такой задачи. Она какая-то неправильная. Сайт твой? Тогда точно задачи такой не должно возникать.
Ну и выбор регулярка vs работа со строками - постоянная дилемма.
Как нравится, так и делай. Описанный способ - ничуть не бред.

ruslan_mart 02.12.2014 08:13

var url = '/photo/bla/5-6-0-0-2', //window.location.pathname
    urlData = /\/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/.exec(url); //Парсим данные
urlData.shift(); //Удаляем первый ненужный элемент

urlData[0]++; //Добавляем единицу к пятёрки
urlData[1] = 2; //Перезаписываем шестёрку на двойку

url = url.replace(/\/[0-9-]+/, '/' + urlData.join('-'));

window.history.pushState(null, null, url); //Меняем URL адресной строки на новый

alert(url);

krutoy 02.12.2014 10:21

addr="/foo/bar/1-2-0-0-2"
rpl=function(str, n1, n2){
    return str.replace(/\/[\d-]+$/, function(p){return p.replace(/^(\/)\d(-)\d(.*)/, "$1"+n1+"$2"+n2+"$3")})
}

alert(rpl(addr, 3, 4))
//  /foo/bar/3-4-0-0-2


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