Mam problemy z pisaniem regexa, który usuwa dowolny z tych parametrów z adresu URL przy użyciu JavaScript:

Pricerange = - #

Pricerange = # - #

Pricerange = # -

Działa to dobrze dla wszystkich, z wyjątkiem ostatniego. Nie usuwa prkerange = 40-

var postUrl = "http://www.test.com/directory/?cat=203604&pricerange=-10&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricerange=40-" 

postUrl = postUrl.replace(/[&\?]\bpricerange\=[0-9]*-[0-9]*\b/g, ""); 

Wynik:

http://www.test.com/directory/?cat=203604&pricerange=40-

Spodziewany wynik:

http://www.test.com/directory/?cat=203604

Oto jsbin.

W adresie URL może być inne parametry, których nie chciałbym usunąć.

1
user3203928 14 sierpień 2014, 21:21

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj ponownie po usunięciu zakończenia {x0}}

Online Demo.

Lub użyj (\b|$), aby dopasować albo granicę słowa lub koniec linii

Poprawiono błąd Demo online


Twój REGEX nie będzie działać poprawnie, jeśli cat=203604 jest niektóre, w których pomiędzy parametrami zapytania pricerange.

Na przykład:

http://www.test.com/directory/?pricerange=-10&cat=203604&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricerange=40-

Wyjście: (Parametr zapytania należy uruchomić przez?)

http://www.test.com/directory/&cat=203604

Możesz go poprawić, używając &*\bpricerange\=[0-9]*-[0-9]*&*

Oto Demo online

5
Braj 14 sierpień 2014, 19:35

Czy musi być wyrażenie regularne? Przechodzą wiele gimnastyki, aby to się stało. Funkcja przeprowadziłaby zadanie:

function cleaner(url)
{
  var parts = url.split("?");

  if (parts.length == 2)
    {
      var comps = parts[1].split('&');

      for ( var i = comps.length - 1; i >= 0; --i )
        {
          if (comps[i].match(/^pricerange=\d*\-\d*$/))
            comps.splice(i, 1);
        }

      if (comps.length > 0)
        parts[1] = comps.join('&');
      else
        parts.splice(1, 1);
    }

  return parts.join("?");
}

var postUrl = "http://www.test.com/directory/?cat=203604&pricerange=-10&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricerange=40-" 

postUrl = cleaner(postUrl);

Przykład: http://codepen.io/paulroubb/pen/srfCJ

1
Paul Roub 14 sierpień 2014, 19:36