RegEx zum extrahieren von Parametern aus url-hash in JavaScript
Meine urls sehen so aus:
http://example.com/whatever#page?x=1&locale=hu&y=2
http://example.com/whatever#page?x=1&locale=hu
http://example.com/whatever#page?locale=hu
http://example.com/whatever#page?locale=
http://example.com/whatever#page?x=1
http://example.com/whatever#page
http://example.com/whatever
Ich würde gerne den parameter locale oder eine leere Zeichenkette, falls es nicht gesetzt.
Ich versuche so etwas wie:
locale = location.hash.replace(/.*(?:[?&]locale=([^&]*))?.*/, "$2");
Aber mein problem ist, dass ich konnte nicht finden die richtige RegExp, das funktioniert für alle Fälle (sowohl, wenn es locale= in der hash-und wenn es nicht)
InformationsquelleAutor Gavriel | 2012-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Stück code, der Auszug aus dem hash und vermeiden Sie es nirgendwo sonst auf der URL:
Und Sie können sehen, es funktioniert auf alle Ihre Testfälle hier: http://jsfiddle.net/jfriend00/p37Mx/
Wenn Sie wollen in der Lage sein, um sich für die parm in der hash-Werte, die Sie verwenden würden:
Sehen, es funktioniert hier: http://jsfiddle.net/jfriend00/6kgUk/
Einer allgemeineren Funktion, die Holen alle Parameter in der URL würde wie folgt Aussehen. Für normale URLs, bei denen der Hashwert wird nach dem query und dem Parameter in der Abfrage-string, würde es so Aussehen. Das ist ein bisschen mehr code, da es nicht mehr. Es holt sich alle Parameter in einem Objekt, wo Sie alle parameter, indem es die Schlüssel und die URL decodiert, Sie alle zu:
Für eine spezielle version, verarbeitet die Parameter in einem hash-Wert und nach einer ? in den hash-Wert wie in den OP ' s Frage (das ist nicht der typische Fall), könnte man dieses verwenden:
Arbeiten demo: http://jsfiddle.net/jfriend00/v8cd5/
Und dann, wenn Sie wollten, dass die lokale option, Sie würden genau dies tun:
Ich fügte hinzu, eine weitere generische Funktion, die Sie übergeben nicht nur die URL, sondern auch die parameter, die Sie suchen.
danke, ich habe es schon getan, allein 🙂 kam Gerade zurück, um es zu veröffentlichen, aber es ist identisch zu deiner 2. Funktion.
Es wäre besser, wenn Sie geschrieben haben, eine Funktion, der Seperator,url,param als parameter
Ich fügte zwei Versionen generischer code, der analysiert alle Parameter, die entweder aus einem normalen query-string oder aus einem hash-Abfrage.
InformationsquelleAutor jfriend00
Wird den trick tun. Ich glaube nicht, dass die
.*
benötigt, weil Sie nicht geben Sie einen start oder ein Ende der Zeichenfolge.Getestet habe ich diese reguläre Ausdruck auf alle deine Beispiele, und Sie alle arbeiteten korrekt 🙂
Edit: sorry, es war ungültig in einigen Fällen. Es ist jetzt richtig in allen Fällen.
InformationsquelleAutor soimon
Wenn Sie wirklich wollen, es zu tun in einem regex:
Es funktioniert gegen alle Ihre Beispiele, obwohl ich mir vorstellen, es ist schrecklich ineffizient.
InformationsquelleAutor twamley