9

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

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

预期输出:

value1=a&value3=b&value4=c

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

4

5 回答 5

17

像这样的东西:

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

也就是说,删除一个或多个非等号/非 & 字符的组,这些字符后跟等号和 & 号或字符串结尾。然后删除任何剩余的尾随 &。

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

于 2013-01-31T11:18:16.493 回答
3
s = s.replace(/[^?=&]+=(&|$)/g,"").replace(/&$/,"");

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

于 2019-01-14T02:10:05.930 回答
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);
于 2013-01-31T11:15:52.093 回答
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)
于 2013-01-31T11:18:48.003 回答
-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('&');
}
于 2013-01-31T11:19:03.940 回答