Работа со строкой, частью 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 Может, выше это полный бред, и есть другой простой способ? |
|
В первую очередь нужно попытаться вообще избавиться от такой задачи. Она какая-то неправильная. Сайт твой? Тогда точно задачи такой не должно возникать.
Ну и выбор регулярка vs работа со строками - постоянная дилемма. Как нравится, так и делай. Описанный способ - ничуть не бред. |
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); |
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, время: 20:05. |