Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengalih keluar parameter rentetan pertanyaan dalam JavaScript?

<p>Adakah terdapat cara yang lebih baik untuk mengalih keluar parameter daripada rentetan pertanyaan rentetan URL daripada JavaScript standard menggunakan ungkapan biasa? </p> <p>Inilah yang saya dapat setakat ini, dan ia nampaknya berkesan dalam ujian saya, tetapi saya tidak suka mencipta semula penghuraian rentetan pertanyaan! </p> <pre class="brush:php;toolbar:false;">function RemoveParameterFromUrl(url, parameter) { if (typeof parameter == "undefined" || parameter == null || parameter == "") buang Ralat baru("parameter diperlukan"); url = url.replace(new RegExp("b" + parameter + "=[^&;]+[&;]?", "gi"), ""); // Buang sisa sampah url = url.replace(/[&;]$/, ""); pulangkan url; }</pre></p>
P粉239164234P粉239164234427 hari yang lalu460

membalas semua(2)saya akan balas

  • P粉163465905

    P粉1634659052023-08-21 11:15:52

    Pelayar moden menyediakan antara muka URLSearchParamsURLSearchParams接口来处理搜索参数。该接口具有delete untuk mengendalikan parameter carian. Antara muka ini mempunyai kaedah delete, yang boleh Alih keluar parameter mengikut nama.

    if (typeof URLSearchParams !== 'undefined') {
      const params = new URLSearchParams('param1=1&param2=2&param3=3')
      
      console.log(params.toString())
      
      params.delete('param2')
      
      console.log(params.toString())
    
    } else {
      console.log(`您的浏览器 ${navigator.appVersion} 不支持URLSearchParams`)
    }

    balas
    0
  • P粉506963842

    P粉5069638422023-08-21 09:30:25

    "[&;]?" + parameter + "=[^&;]+"

    Nampak berbahaya kerana hujah 'bar' akan sepadan:

    ?a=b&foobar=c

    Selain itu, jika parameter mengandungi sebarang aksara yang mempunyai makna istimewa dalam ungkapan biasa, seperti '.', ungkapan biasa ini akan gagal. Dan ia bukan regex global, jadi hanya satu contoh parameter akan dialih keluar.

    Saya tidak akan menggunakan regex mudah untuk melakukan ini, saya akan menghuraikan parameter dan membuang yang saya tidak perlukan.

    function removeURLParameter(url, parameter) {
        //如果你有一个location/link对象,最好使用l.search
        var urlparts = url.split('?');   
        if (urlparts.length >= 2) {
    
            var prefix = encodeURIComponent(parameter) + '=';
            var pars = urlparts[1].split(/[&;]/g);
    
            //反向迭代可能会破坏性
            for (var i = pars.length; i-- > 0;) {    
                //字符串.startsWith的习惯用法
                if (pars[i].lastIndexOf(prefix, 0) !== -1) {  
                    pars.splice(i, 1);
                }
            }
    
            return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
        }
        return url;
    }

    balas
    0
  • Batalbalas