Замена подстроки в строке JS

360
07 января 2018, 08:08

Всем привет. У меня есть пару селектов. в результате выбора значений каждого селекта составляется строка такого типа:

var string = Имя выбранного селекта = значение (option value)&Имя выбранного селекта = значение (option value)&.....

и так до конца. мне надо чтобы при смене значения селекта который я уже выбирал ранее значение в этой строке находилось и менялось, а у меня при выборе оно вставляется в конец строки, и получется что 1 и тот же параметр может вывестись 2 раза.

Как можно создать регулярное выражение которое ищет и заменяет нужное значение?

Код проверки:

var allparams = "";
var selname = "";
var selval = "";
if($("#reg option:selected").val() != ""){
    selname = $('#reg').attr('name');
    selval = $("#reg option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#mode option:selected").val() != ""){
    selname = $('#mode').attr('name');
    selval = $("#mode option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#redir option:selected").val() != ""){
    selname = $('#redir').attr('name');
    selval = $("#redir option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#tic option:selected").val() != ""){
    selname = $('#tic').attr('name');
    selval = $("#tic option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#yaca option:selected").val() != ""){
    selname = $('#yaca').attr('name');
    selval = $("#yaca option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#trust option:selected").val() != ""){
    selname = $('#trust').attr('name');
    selval = $("#trust option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#vozr-mes option:selected").val() != ""){
    selname = $('#vozr-mes').attr('name');
    selval = $("#vozr-mes option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#pub option:selected").val() != ""){
    selname = $('#pub').attr('name');
    selval = $("#pub option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#indeks-pub option:selected").val() != ""){
    selname = $('#indeks-pub').attr('name');
    selval = $("#indeks-pub option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#pub_len0 option:selected").val() != ""){
    selname = $('#pub_len0').attr('name');
    selval = $("#pub_len0 option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#pub_month option:selected").val() != ""){
    selname = $('#pub_month').attr('name');
    selval = $("#pub_month option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#pub_a option:selected").val() != ""){
    selname = $('#pub_a').attr('name');
    selval = $("#pub_a option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#spama option:selected").val() != ""){
    selname = $('#spama').attr('name');
    selval = $("#spama option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#v-arhive option:selected").val() != ""){
    selname = $('#v-arhive').attr('name');
    selval = $("#v-arhive option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#spama option:selected").val() != ""){
    selname = $('#spama').attr('name');
    selval = $("#spama option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#mozhno-v-arhiv option:selected").val() != ""){
    selname = $('#mozhno-v-arhiv').attr('name');
    selval = $("#mozhno-v-arhiv option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#dobavit option:selected").val() != ""){
    selname = $('#dobavit').attr('name');
    selval = $("#dobavit option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#ggl option:selected").val() != ""){
    selname = $('#ggl').attr('name');
    selval = $("#ggl option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#rota option:selected").val() != ""){
    selname = $('#rota').attr('name');
    selval = $("#rota option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#mira option:selected").val() != ""){
    selname = $('#mira').attr('name');
    selval = $("#mira option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#weba option:selected").val() != ""){
    selname = $('#weba').attr('name');
    selval = $("#weba option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#sum option:selected").val() != ""){
    selname = $('#sum').attr('name');
    selval = $("#sum option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#seven option:selected").val() != ""){
    selname = $('#seven').attr('name');
    selval = $("#seven option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#v-sape option:selected").val() != ""){
    selname = $('#v-sape').attr('name');
    selval = $("#v-sape option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#status option:selected").val() != ""){
    selname = $('#status').attr('name');
    selval = $("#status option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#kod-otv option:selected").val() != ""){
    selname = $('#kod-otv').attr('name');
    selval = $("#kod-otv option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#inggl option:selected").val() != ""){
    selname = $('#inggl').attr('name');
    selval = $("#inggl option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#reyting option:selected").val() != ""){
    selname = $('#reyting').attr('name');
    selval = $("#reyting option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#monetizaciyarub option:selected").val() != ""){
    selname = $('#monetizaciyarub').attr('name');
    selval = $("#monetizaciyarub option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#monetizacii option:selected").val() != ""){
    selname = $('#monetizacii').attr('name');
    selval = $("#monetizacii option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#roi option:selected").val() != ""){
    selname = $('#roi').attr('name');
    selval = $("#roi option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#rashody-rub-v-god option:selected").val() != ""){
    selname = $('#rashody-rub-v-god').attr('name');
    selval = $("#rashody-rub-v-god option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#esche-podkl option:selected").val() != ""){
    selname = $('#esche-podkl').attr('name');
    selval = $("#esche-podkl option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#mozhno-kleit option:selected").val() != ""){
    selname = $('#mozhno-kleit').attr('name');
    selval = $("#mozhno-kleit option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#subj option:selected").val() != ""){
    selname = $('#subj').attr('name');
    selval = $("#subj option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#alexa option:selected").val() != ""){
    selname = $('#alexa').attr('name');
    selval = $("#alexa option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#trafik-iz-ps option:selected").val() != ""){
    selname = $('#trafik-iz-ps').attr('name');
    selval = $("#trafik-iz-ps option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#dvizhok option:selected").val() != ""){
    selname = $('#dvizhok').attr('name');
    selval = $("#dvizhok option:selected").val();
    allparams += selname + "=" + selval + "&";
}
if($("#dney option:selected").val() != ""){
    selname = $('#dney').attr('name');
    selval = $("#dney option:selected").val();
    allparams += selname + "=" + selval + "&";
}

var params = "";
var selectname = "";
var selectval = "";

$("select").on("change",function(){


    selectname += $(this).attr('name');

    selectval +=  $(this).val();
    if(allparams !== ""){
        if(params !== ""){
            params+="&" + selectname + "=" + selectval;
        }
        else{
            if(allparams.indexOf($(this).attr('name')) == - 1){
                params+=allparams + selectname + "=" + selectval;
            }
            else{
                params+= allparams + selectname + "=" + selectval;
                console.log('b');
            }
        }
    }
    else{
        if(params !== ""){
            params+= "&" + selectname + "=" + selectval;
        }
        else{
            params+= selectname + "=" + selectval;
        }
    }
    console.log(params);
    //indow.location = "http://nature-photographing.com/video/test/select.php?" + params;

});
function setOpt(a,b){
}
Answer 1

Предлагаю все селекторы хранить в объекте, и строчку формировать на основе объекта. При этом регулярные выражения вообще можно не использовать.

var allparams = {};
if($("#esche-podkl option:selected").val() != ""){
   selname = $('#esche-podkl').attr('name');
   selval = $("#esche-podkl option:selected").val();
   allparams[selname] = selval;
}
if($("#mozhno-kleit option:selected").val() != ""){
   selname = $('#mozhno-kleit').attr('name');
   selval = $("#mozhno-kleit option:selected").val();
   allparams[selname] = selval;
}
// ваши if-ы дальше
var str = "";
for(var sel in allparams) {
   str += sel+"="+allparams[sel]+"&";
}

Алгоритм такой, сначала все ваши if-ы собирают объект.
После за один проход из этого объекта собирается строчка.