Bagaimana untuk mengalih keluar parameter rentetan pertanyaan dalam JavaScript?
P粉239164234
P粉239164234 2023-08-20 18:46:10
0
2
496
<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粉239164234
P粉239164234

membalas semua(2)
P粉163465905

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`)
}
P粉506963842
"[&;]?" + 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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan