Я хочу удалить все пустые значения из URL:

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

Ожидаемый результат:

value1=a&value3=b&value4=c

Мне нужно только часть запроса URL, чтобы принять во внимание.

9
Kasper DK 31 Янв 2013 в 15:08

5 ответов

Лучший ответ

Что-то вроде этого:

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

То есть удалите группы из одного или нескольких символов, отличных от символов равенства и не амперсанда, за которыми следуют знак равенства и знак амперсанда или конец строки. Затем удалите остатки амперсанда.

Демонстрация: http://jsfiddle.net/pKHzr/

14
nnnnnn 31 Янв 2013 в 11:18

Где вы берете все значения? Я предлагаю использовать массив:

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('&');
}
-1
Antonio Papa 31 Янв 2013 в 11:25

Я не нахожу никакого решения сделать это с одним выражением 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)
0
sdespont 31 Янв 2013 в 11:18
s = s.replace(/[^?=&]+=(&|$)/g,"").replace(/&$/,"");

Добавил '?' на ответ nnnnnn, чтобы исправить проблему, когда первый параметр пуст в полном URL.

1
Keith Turkowski 14 Янв 2019 в 02:10

Это должно помочь:

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
Jan Hančič 31 Янв 2013 в 11:15