正则表达式删除url参数

时间:2014-08-14 17:21:42

标签: javascript regex

我在编写一个使用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

我不想删除网址中的其他参数。

2 个答案:

答案 0 :(得分:4)

删除结尾\b

后再试一次

online demo

或使用(\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]*&*

进行更正

这是online demo

答案 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);

示例:http://codepen.io/paulroub/pen/srfCj

相关问题