помогите "разбить" url
здравствуйте.
есть страница - каталог товаров, где перегружается контент, когда посетитель кликает по фильтрам. идет обращение к функции, аргументом является строка типа http://domen.com/g-star,theory/shop-...e?_format=json или http://domen.com/shop-asos,ssense/ja...e?_format=json тоесть некоторых может и не быть. мне надо разбить эту строку, чтоб вывести, какие фильтры применены и ссылки для их удаления, что-то вроде: <a href=getContent('http://domen.com/shop-ssense/jackets,shorts/browse?_format=json') >asos</a> зараннее благодарен. |
dengunya, что именно нужно получить?
пару-тройку входных-выходных строк приведите |
допустим, мы сейчас здесь:
var url = 'http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos,ssense/browse?_format=json&callback=?'; у нас сейчас 4 фильтра: g-star и theory в первом "блоке", asos и ssense во втором. может быть еще и 3й напр. .../shop-asos,ssense/shorts/browse?... пробовал так:
var u2 = url.substring(36).split('browse?')[0];
itemObj['normalized_name'] - переменная, где перебираю уже примененные фильтры
var replString = [",/" , "/," , "//" , "/shop-/"];
var iRepl = 0;
var ur = u2.replace(itemObj['normalized_name'],'');
do {
ur = ur.replace(replString[iRepl],'/');
iRepl++;
}
while (replString[iRepl]);
ur = ur.replace('-,','-');
var newUrl = 'http://dev.swyf.pp.ciklum.com/us-men'+ur+'browse?_format=json&callback=?';
$("div#searchBar").prepend("<a href='javascript:getContent(\""+newUrl+"\");'>"+itemObj['normalized_name']+"</a>");
в 12й строке вывожу ссылки, которыми удалять фильтры. это все, собственно, в теле getContent() но проблема в том, что мне и добавлять их (фильтры) надо, то есть мне надо явно выделить этих 3 части urlа (это просто, если их 3, но может быть 2 или 1). примечательно, что во втором перед ними идет еще слово "shop-" |
dengunya,
1. Приведите 4 Варианта входной строки и для каждой итоговый массив |
a)где мы: http://dev.swyf.pp.ciklum.com/us-men...,ssense/browse
b)ссылка "asos" должна быть на http://dev.swyf.pp.ciklum.com/us-men...-ssense/browse --------------- a) http://dev.swyf.pp.ciklum.com/us-men...,theory/browse b) theory на http://dev.swyf.pp.ciklum.com/us-men/g-star/browse в общем-то мне надо повторить то, что реализовано на dev.swyf.pp.ciklum.com в плане фильтров |
http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos,ssense/browse
http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-ssense/browse http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/browse http://dev.swyf.pp.ciklum.com/us-men/g-star/browse Поправил для полной видимости |
dengunya,
Поясните каждую строку |
http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos,ssense/browse
помимо прочих, здесь применен фильтр ssense. мне нужно сделать ссылку ssense, при клике на которую перехожу на http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos/browse отсюда, например, переходом по ссылке asos мы попадаем на http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/browse (для меня проблема, как корректно убрать "остаток" тоесть "shop-") и в обратном направлении. находясь уже тут http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/browse ссылкой asos в фильтрах магазина перейти на http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos/browse еще есть категории: мы тут : http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos/browse кликаем на "shorts" и попадаем на http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos/shorts/browse |
мне надо соорудить объект елементами которого будут массивы, напр.:
http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos/browse
{
brand : [g-star , theory],
shop : [asos],
category : []
}
трудности вызывает, отсутствие, например, категории. в таком случае я не могу просто взять split('/') а потом spli(','), плюс эта вставка "shop". не хватает мне опыта javascript( |
var str = 'http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos,ssense/browse' var str0=str.replace(/^(.*?.\/(?=g-star,theory\/))([^\/]*\/)([^\/]*\/)(.*)$/i,'$1') alert(str0) alert(RegExp["$2"]) alert(RegExp["$3"]) alert(RegExp["$4"])
var str = 'http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos,ssense/browse'
var str0=str.replace(/^(.*?.\/(?=g-star,theory\/))([^\/]*\/)([^\/]*\/)(.*)$/i,'$1')
var Ost = str.replace(str0,'').split("/")
alert(Ost.join(";\n"))
|
спс. но тут беда в том, что g-star,theory/ может и не быть, а в таком случае этот код не работает.
начинаем мы отсюда http://dev.swyf.pp.ciklum.com/us-men/browse и цепляем фильтры. если из фильтров применили только категорию (jeans напр.), то перед browse вставляется /all-jeans. если только бренд (prada), то вставляем /prada. если магазин, то /shop-diesel. если и бренд, и категорию, то /prada/jeans если и бренд, и магазин, то /prada/shop-diesel ну а если все 3, то /prada/shop-diesel/jeans |
dengunya,
1. Приведите полный список контрольных слов фильтра 2. Длина И вариант строки до фильтров - изменяецо или постоянный ? Т.е это http://dev.swyf.pp.ciklum.com/ - везде идентично ? ================================================== =============== Такой вариает пойдет? (Запятые парсим позже
var str = 'http://dev.swyf.pp.ciklum.com/us-men/g-star,theory/shop-asos,ssense/browse'
var str0=str.replace('http://dev.swyf.pp.ciklum.com/','')
var Ost = str0.split("/")
alert(Ost.join(";\n"))
|
Цитата:
вот, что я пытаюсь делать:
var u2 = url.replace('http://dev.swyf.pp.ciklum.com/us-men/','').split('/browse?')[0];
var u = u2.split("/");
if (u.length == 3){
var urlObj = {
"brand" : u[0].split(','),
"shop" : u[1].split(','),
"category" : u[2].split(',')
}
}
else if (u.length == 2){}
перебрать все варианты)) единственное, не знаю чем проверить наличие "shop-" и "all-" в строке, определить, это category или shop, если u.length != 3 |
"shop-" и "all-"
Цитата:
if(str.indexOf("shop-")!= -1) {
//....
}
if(str.indexOf("all-")!= -1) {
//....
}
|
о,оно. спасибо за ответы.
и еще (не сочти меня полным дибилом=)), для регулярных выражений есть что-то типа x(?=y), только не "Находит x, только если за x следует y", а чтоб искал x только если ПЕРЕД ним идет y ? |
|
понял. спасибо еще раз за уделенное внимание. буду ковырять
|
Цитата:
|
та все тот же /shop-diesel,adio/. не работал с регулярными выражениями. думаю, как вытащить то, что после "shop-" идет. хотя
Цитата:
|
| Часовой пояс GMT +3, время: 00:18. |