2013-08-21 12 views
5

Sono abbastanza nuovo per regex e la necessità di rimuovere alcuni contenuti dal nostro urlRimuovere querystring parametri da URL con regex

http://mysite.blah/problem/smtp/smtp-open-relay?page=prob_detail&showlogin=1&action=smtp:134.184.90.18 

ho bisogno di rimuovere tutto dalla "?" e via, lasciandomi solo:

http://mysite.blah/problem/smtp/smtp-open-relay 

Ecco la nostra espressione di espressioni regolari che stiamo usando per prendere i dati del percorso. Ad esempio, posso prendere "smtp" e "smtp-open-relay" (di cui abbiamo bisogno). Tuttavia a volte il nostro url cambia a seconda di dove viene l'utente, aggiungendo in tal modo i parametri della querystring che sta facendo esplodere la nostra attuale espressione regolare.

// Retrieve the route data from the route 
var routeData = /([0-9a-zA-Z_.-]+)\/([0-9a-zA-Z_.-]+)$/g.exec(route); 

Ho bisogno di ignorare la roba dal "?" sopra.

+0

si potrebbe provare a dividere il?. – scrappedcola

+5

È davvero facile sbarazzarsi della stringa di query. Basta fare questo: 'url = url.split ('?') [0]' – musicnothing

risposta

17

Un'espressione regolare è probabilmente più del necessario.

Si potrebbe fare le seguenti operazioni per rimuovere il tutto ? e (query stringa + hash) dopo che è:

var routeData = route.split("?")[0]; 

Se veramente si voleva mettere a nudo solo la stringa di query, si potrebbe preservare l'hash da ricostruendo l'URL dall'oggetto window.location:

var routeData = window.location.origin + window.location.pathname + window.location.hash; 

Se si desidera che la stringa di query, si può leggere con window.location.search.

+0

Sono andato con questa soluzione. Grazie a tutti per l'aiuto! – cpeele00

0

se si sta facendo questo in-browser, lasciare che il browser fare il parsing:

location.origin + location.pathname 

O per gli URL arbitrari:

function withoutQS(_url) { 
    var url = document.createElement('a'); 
    url.href = _url; 
    return url.origin + url.pathname; 
} 
5

Ho appena usato questo uno

var routeData= route.substring(0, route.indexOf('?')); 
+0

Cosa succede se l'indice di è -1? – Learner

+0

well routeData è'undefined' then –

0

Usare questa funzione:

var getCleanUrl = function(url) { 
 
    return url.replace(/#.*$/, '').replace(/\?.*$/, ''); 
 
}; 
 

 
// get rid of hash and params 
 
console.log(getCleanUrl('https://sidanmor.com/?firstname=idan&lastname=mor'));