从URL字符串中删除所有空值

3
我正在尝试从URL字符串中删除所有空参数。我的URL看起来像这样:
http://localhost/wm/frontend/www/?test=&lol=1&boo=2。我的代码应该返回:
http://localhost/wm/frontend/www/?lol=1&boo=2,但它没有。它返回的是:
http://localhost/wm/frontend/www/?&lol=1&boo=2。这是我正在使用的正则表达式:replace("/(&?\w+=((?=$)|(?=&)))/g","")。我知道我可以使用replace()匹配第一个替换后的字符串'?&',但我宁愿编辑我的正则表达式来实现这一点,这样就只需要一行代码。有什么想法吗?这是我的jsfiddle

只是好奇,为什么你需要在客户端删除它,而不是在服务器端处理它呢?顺便问一下,这些URL最初是如何构建的? - A. Wolff
@A.Wolff 用 history.js 进行筛选搜索。 - user2636556
4个回答

1
您可以使用此正则表达式进行替换:
/[^?&=]+=(?:&|$)|&[^?&=]+=(?=&|$)/g

把它替换为:

并用以下内容替换:

""

RegEx演示


0

例如,您可以说:

var s = 'http://localhost/wm/frontend/www/?test=&lol=1&boo=2&r=';
s = s.replace(/\w*=\&/g, '');
s = s.replace(/&\w*=$/g, '');

也就是说,删除一块字母+=+&。然后,在行末删除&+字母+=(由$表示)。

对于您的输入,它返回:

http://localhost/wm/frontend/www/?lol=1&boo=2

JSFiddle中查看,或直接点击这里:

var s = 'http://localhost/wm/frontend/www/?test=&lol=1&boo=2&r=';
s = s.replace(/\w*=\&/g, '');
s = s.replace(/&\w*=$/g, '');
document.write(s)

测试

如果输入中间和结尾都包含块:

http://localhost/wm/frontend/www/?test=&lol=1&boo=2&r=

我上面编写的代码返回:

http://localhost/wm/frontend/www/?lol=1&boo=2

1
这不会删除尾随的&x= - Alex K.
没错,谢谢 @AlexK。我刚刚更新了以涵盖这种情况。 - fedorqui

0

尝试

/\w+=&|&\w+=$/g,

var url = "http://localhost/wm/frontend/www/?test=&lol=1&boo=2&j=";
document.write(url.replace(/\w+=&|&\w+=$/g, ""))


0

尝试调用本地的“replace”函数,它可以在第一个参数中使用正则表达式。

str.replace(regex, replace_str)

请查看此JSFiddle以查看运行示例:http://jsfiddle.net/xvqasgmu/1/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接