Javascript 要删除url参数,请使用正则表达式

Javascript 要删除url参数,请使用正则表达式,javascript,regex,Javascript,Regex,我在编写使用javascript从url中删除以下参数的正则表达式时遇到问题: 价格范围=-# 价格范围=#-# 价格范围=#- 除了最后一个,其他所有的都可以。它不会删除pricerange=40- var postUrl = "http://www.test.com/directory/?cat=203604&pricerange=-10&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricer

我在编写使用javascript从url中删除以下参数的正则表达式时遇到问题:

价格范围=-#

价格范围=#-#

价格范围=#-

除了最后一个,其他所有的都可以。它不会删除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
这是你的电话号码


url中可能有我不想删除的其他参数。

请在删除结尾后重试
\b

或者使用
(\b |$)
匹配单词边界或行尾

纠正


如果
cat=203604
是介于
pricerange
查询参数之间的某个参数,则正则表达式将无法正常工作

例如:

http://www.test.com/directory/?pricerange=-10&cat=203604&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricerange=40-
输出:(查询参数应该由谁启动?)

您可以使用
&*\bpricerange\=[0-9]*-[0-9]*&*


下面是

请在删除结尾后重试
\b

或者使用
(\b |$)
匹配单词边界或行尾

纠正


如果
cat=203604
是介于
pricerange
查询参数之间的某个参数,则正则表达式将无法正常工作

例如:

http://www.test.com/directory/?pricerange=-10&cat=203604&pricerange=10-20&pricerange=20-30&pricerange=30-40&pricerange=40-
输出:(查询参数应该由谁启动?)

您可以使用
&*\bpricerange\=[0-9]*-[0-9]*&*


这里是

它必须是正则表达式吗?为了实现这一点,我们要做很多体操。函数将完成以下工作:

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

示例:

它必须是正则表达式吗?为了实现这一点,我们要做很多体操。函数将完成以下工作:

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

示例:

特别支持第二个版本。另外,在
[&\?]
之后不需要
\b
,因此:
/[&\?]价格范围\=[0-9]*-[0-9]*(\b |$)/g
是的,您是对的。无需使用
\b
,因为
[&\?]
已定义为prefix@PaulRoub需要
\b
。看看更新后的帖子。OP regex paten中还有一个错误。我想唯一的问题是,如果url是“”那么“?”会留在那里。抱歉,仍然不在那里。这一个不起作用:特别是投票支持第二个版本。另外,在
[&\?]
之后不需要
\b
,因此:
/[&\?]价格范围\=[0-9]*-[0-9]*(\b |$)/g
是的,您是对的。无需使用
\b
,因为
[&\?]
已定义为prefix@PaulRoub需要
\b
。看看更新后的帖子。OP regex paten中还有一个错误。我想唯一的问题是,如果url是“”那么“?”会留在那里。抱歉,仍然不在那里。这个不行,谢谢。这也是一个很好的建议。可能更容易维护。谢谢。这也是一个很好的建议。可能更容易维护。