从URL中删除所有空值

11

我想从URL中删除所有空值:

var s="value1=a&value2=&value3=b&value4=c&value5=";
s = s.replace(...???...);
alert(s);

期望输出:

value1=a&value3=b&value4=c

我只需要考虑URL中的查询部分。


1
使用JS还是PHP?(preg-replace标签应该被移除吗?) - nnnnnn
5个回答

19

像这样的东西:

s = s.replace(/[^=&]+=(&|$)/g,"").replace(/&$/,"");

也就是说,移除一个或多个非等号/非&符号字符组,并且紧跟在等号和&符号或字符串结尾之后。然后移除任何剩余的尾随&符号。

演示:http://jsfiddle.net/pKHzr/


如果第一个参数为空,则会从URL左侧删除所有内容,我认为应该更新为:s = s.replace(/[^?=&]+=(&|$)/g,"").replace(/&$/,""); - Keith Turkowski
@KeithTurkowski - 问题说:“我只需要考虑URL的查询部分。” - nnnnnn

4
s = s.replace(/[^?=&]+=(&|$)/g,"").replace(/&$/,"");

在nnnnnn的答案中添加了一个“?”以解决完整URL中第一个参数为空的问题。


谢谢。但是在你的解决方案中仍然存在“?”标记。你能否请编辑你的答案? - Ulvi
@Ulvi,我不理解你的评论。 - Keith Turkowski
或者如果您需要删除空的或零的(...&param1 = 0 ...)参数:s = s.replace(/[^?=&]+=(0&|0|&|$)/g,"").replace(/&$/,""); - be3

0

这应该能解决问题:

var s="value1=a&value2=&value3=b&value4=c&value5=";
var tmp = s.split('&')
var newS = '';
for(var i in a) {
    var t = a[i];
    if(t[t.length - 1] !== '=') {
        newS += t + '&';
    }
}

if(newS[newS.length - 1] === '&') {
    newS = newS.substr(0, newS.length - 1);
}
console.log(newS);

0

我无法找到只使用一个Regex表达式解决这个问题的方法。

但是你可以遍历你的字符串并构建一个新的结果字符串: http://jsfiddle.net/UQTY2/3/

var s="value1=a&value2=&value3=b&value4=c&value5=";
var tmpArray = s.split('&');
var final = '';

for(var i=0 ; i<tmpArray.length ; i++)
        if(tmpArray[i].split('=')[1] != '')
             final += tmpArray[i] + '&';

final = final.substr(0,final.length-1)

alert(final)

-1

你从哪里获取所有的值? 我建议使用数组:

function getValues(str){
var values = [];
var s = str.split('&');

for(var val in s){//source is a
    var split = val.split('=');
    if(split [1] != '' && split [1] != null){
        values.push(val);
    }
}

return values.join('&');
}

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