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ąć.
2 odpowiedzi
Spróbuj ponownie po usunięciu zakończenia {x0}}
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
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