2011-10-31 24 views
9

Sto provando ad usare javascript per fare un'espressione regolare su un url (window.location.href) che ha parametri di stringa di query e non riesco a capire come farlo. Nel mio caso, c'è un parametro stringa di query può ripetersi; per esempio "qualità", ecco sto cercando di abbinare "quality =" per ottenere un array con i 4 valori (alto, moro, occhi verdi, bello):Espressione regolare Javascript corrispondenza multipla

http://www.acme.com/default.html?id=27&quality=tall&quality=dark&quality=green eyes&quality=handsome 
+1

Questi parametri non ha senso. – Anders

risposta

20

È possibile utilizzare una regex per Fai questo.

var qualityRegex = /(?:^|[&;])quality=([^&;]+)/g, 
    matches, 
    qualities = []; 

while (matches = qualityRegex.exec(window.location.search)) { 
    qualities.push(decodeURIComponent(matches[1])); 
} 

jsFiddle.

Le qualità saranno in qualities.

+0

Utilizzare 'window.location.search', non il percorso o href. – kojiro

+0

@kojiro Sì, risolto quasi immediatamente :) – alex

+0

Dove sono * le quantità * definite? : P – kojiro

-2

Una leggera variazione della risposta di @alex per coloro che desiderano essere in grado di associare i nomi dei parametri non predeterminati nell'URL.

var getUrlValue = function(name, url) { 
    var valuesRegex = new RegExp('(?:^|[&;])' + name + '=([^&;]+)', 'g'), 
     matches, 
     values = []; 

    while (matches = valuesRegex.exec(url)) { 
     values.push(decodeURIComponent(matches[1])); 
    } 

    return values; 
} 

var url = 'http://www.somedomain.com?id=12&names=bill&names=bob&names=sally'; 

// ["bill", "bob", "sally"] 
var results = getUrlValue('names', url); 

jsFiddle

+0

[Questo codice ha numerosi problemi che analizzano le stringhe di query] (http://zzzzbov.com/blag/querystring-hell). – zzzzBov

+0

@zzzzBov Il codice assume una stringa di interrogazione in cui i parametri iniziano con un '?' E ciascuno è separato da '&' o ';' (lo stesso formato specificato dal richiedente). Gestire i molti casi limite che descrivi nel tuo post sul blog non varrebbe la complessità che ha aggiunto. Ovviamente se vuoi gestire questi casi limite, jquery ha una funzione per analizzare un url in un oggetto invece di implementare il tuo con DOM (come specificato dal richiedente). –

+0

Il mio punto principale è: non reinventare la ruota, utilizzare una libreria che lo faccia correttamente (o almeno per lo più correttamente). – zzzzBov

Problemi correlati