RegEx pour extraire des paramètres à partir de l'url de hachage en JavaScript
Mon url ressemblera à:
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
Je voudrais obtenir le paramètre locale ou une chaîne vide si elle n'est pas définie.
Je suis en train d'essayer quelque chose comme:
locale = location.hash.replace(/.*(?:[?&]locale=([^&]*))?.*/, "$2");
Mais mon problème est que je n'arrivais pas à trouver le bon RegExp qui fonctionne pour tous les cas (à la fois quand il y a locale= dans la table de hachage et quand il n'y en a pas)
Vous devez vous connecter pour publier un commentaire.
Voici un morceau de code qui va extraire à partir de la table de hachage et de l'éviter n'importe où ailleurs dans l'URL:
Et, vous pouvez voir le travail sur tous vos cas de test ici: http://jsfiddle.net/jfriend00/p37Mx/
Si vous voulez être capable de regarder pour tout parm dans la table de hachage, vous pouvez utiliser cette:
Voir les travaux ici: http://jsfiddle.net/jfriend00/6kgUk/
Plus générique de la fonction qui va récupérer tous les paramètres dans l'URL ressemblera à ceci. Pour normale Url où le hachage est après la requête et les paramètres sont dans la chaîne de requête, il devrait ressembler à ceci. C'est un peu plus de code car il n'est plus. Il récupère tous les paramètres dans un objet où vous pouvez chercher n'importe quel paramètre par il est la clé et c'URL décode tous trop:
Pour une version spéciale qui gère des paramètres à une valeur de hachage et après ? dans la valeur de hachage comme dans le cas des OP question (qui n'est pas le cas typique), on peut utiliser ceci:
De travail de démonstration: http://jsfiddle.net/jfriend00/v8cd5/
Et, alors si vous voulais l'option locale, vous devriez juste faire ceci:
y
paramètre à partir de ce lienhttp://example.com/whatever?x=1&locale=hu&y=2
il renvoie la chaîne vide. (quand il n'y a pas de signe #dans le lien), je pense donc qu'il serait plus général, si vous obtenez '#' comme paramètreRegExp("#.*[?&]" + parm + "=([^&]+)(&|$)");
àRegExp(".*[?&]" + parm + "=([^&]+)(&|$)");
il fonctionne, mais je ne sais pas si c'est correct ou pas. pouvez-vous confirmer?Fera l'affaire. Je ne pense pas que le
.*
sont nécessaires, parce que vous ne spécifiez pas un début ou une fin de la chaîne.J'ai testé cette expression régulière sur l'ensemble de vos exemples et ils ont tous travaillé correctement 🙂
Edit: désolé, il n'était pas valide dans certains cas. C'est maintenant correct dans tous les cas.
Si vous voulez vraiment faire dans une regex:
Il fonctionne sur tous vos exemples, bien que j'imagine que c'est horriblement inefficace.