2017-03-09 51 views
0

我有這個var存儲一個字符串,表示一個充滿參數的URL。我使用的是AngularJS,我不確定是否有任何有用的模塊(或者用普通的JavaScript)可以在不使用正則表達式的情況下刪除不需要的URL參數?如何從URL字符串中刪除一些參數?

比如我需要刪除&month=05&year=2017來自:

var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017"

+0

純js應該沒問題。你有什麼嘗試? –

+0

@ Gonzalo.-你的意思是使用字符串對象的方法? – commonSenseCode

+0

你可以使用String.prototype.replace作爲instace –

回答

1

您可以使用此function稱取2個參數:param你正試圖刪除和你source URL

function removeParam(key, sourceURL) { 
 
    var rtn = sourceURL.split("?")[0], 
 
     param, 
 
     params_arr = [], 
 
     queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : ""; 
 
    if (queryString !== "") { 
 
     params_arr = queryString.split("&"); 
 
     for (var i = params_arr.length - 1; i >= 0; i -= 1) { 
 
      param = params_arr[i].split("=")[0]; 
 
      if (param === key) { 
 
       params_arr.splice(i, 1); 
 
      } 
 
     } 
 
     rtn = rtn + "?" + params_arr.join("&"); 
 
    } 
 
    return rtn; 
 
} 
 

 
var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017"; 
 

 
var url2 = removeParam("month", url); 
 
var url3 = removeParam("year", url2); 
 

 
console.log(url3);


Alternative solution with a regex

1

使用字符串替換:

var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017"; 
 
var modifiedUrl = url.replace('&month=05','').replace('&year=2017',''); 
 
console.log(modifiedUrl);

1

當然您也可以使用RegExr:((&)年=([^ &])) |((&)month = ([^ &]))

使用:

url = url.replace(/(year=([^&]*))|(month=([^&]*))/g, '');

更多的正則表達式:)...

function removeParam(name, url){ 
    return url.replace('/((&)*' + name + '=([^&]*))/g',''); 
} 

var url = "?derivate=21&gear_type__in=13&engine=73&month=05&year=2017" 
 

 
function removeParam(name, _url){ 
 
     var reg = new RegExp("((&)*" + name + "=([^&]*))","g"); 
 
     return _url.replace(reg,''); 
 
} 
 

 
url = removeParam('year', url); 
 
url = removeParam('month', url); 
 

 
document.getElementById('url-replace').innerHTML = url;
<div id="url-replace"></div>

+0

從問題:「是否有任何有用的模塊來刪除不需要的URL參數**而不必使用正則表達式**「。 – Mistalis

+0

Opps。那是我的錯誤。 – HoangHieu

2

使用URLSearchParams API:

var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017" 
 
var urlParts = url.split('?'); 
 
var params = new URLSearchParams(urlParts[1]); 
 
params.delete('month'); 
 
params.delete('year') 
 
var newUrl = urlParts[0] + '?' + params.toString() 
 
console.log(newUrl);

使用該API的優勢在於,它與和創建具有正確percent encoding.

串欲瞭解更多信息,請參閱MDN Developer Reference - URLSearchParams API.

相關問題