我在编写一个使用javascript从网址中删除任何这些参数的正则表达式时遇到了麻烦:
pricerange = - #
pricerange =# - #
pricerange =# -
除了最后一个之外,这对所有人都有效。它不会删除pricerange = 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, "");
结果:
http://www.test.com/directory/?cat=203604&pricerange=40-
预期结果:
http://www.test.com/directory/?cat=203604
这是jsbin。
我不想删除网址中的其他参数。
答案 0 :(得分:4)
删除结尾\b
或使用(\b|$)
匹配字边界或行尾
更正了online demo
如果cat=203604
位于pricerange
个查询参数之间,那么正则表达式将无法正常工作。
例如:
http://www.test.com/directory/?pricerange=-10&cat=203604&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricerange=40-
输出:(查询参数应该以?开始)
http://www.test.com/directory/&cat=203604
您可以使用&*\bpricerange\=[0-9]*-[0-9]*&*
答案 1 :(得分:1)
它必须是正则表达式吗?我们正在经历很多体操,以实现这一目标。一个函数可以完成这项工作:
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);