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(/&$/,"");

つまり、等号とアンパサンドまたは文字列の終わりが後に続く1つ以上の非等号/非アンパサンド文字のグループを削除します。次に、残っている末尾のアンパサンドをすべて削除します。

デモ: 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

Regex1つの式でそれを行うための解決策は見つかりません。

ただし、文字列をループして新しい結果文字列を作成することはできます: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 に答える
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 に答える
-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 に答える