Dites, nous avons une chaîne de requête qui ressemble à ceci:
{param:test1, param2:test2}
4 Réponses :
Tant que c'est dans ce format, c'est-à-dire que des valeurs de chaîne (et les chaînes ne contiennent pas "&&" code> ou des points), vous pouvez facilement analyser:
var params = theString.split(' && ');
var map = {};
for (var i = 0; i < params.length; i++) {
var parts = params[i].split(':');
map[parts[0]] = parts[1].substr(1, parts[1].length - 2);
}
J'utilise habituellement le "Recherche et ne remplace pas" Méthode :
+1: C'est un peu plus robuste que ma suggestion. Pourrait encore être amélioré; S'il y a un espace entre l'identifiant et le côlon, il est inclus dans l'identifiant. :)
La chose importante, ici, c'est que vous puissiez prédire le format des «chaînes» à l'avant, afin de rendre le regexp aussi simple que possible. Cela aidera à l'entretien, à l'avenir, mais devrait probablement être bien documenté quelque part, de sorte qu'il est clair quelles sont les hypothèses.
Utiliser le traitement de la chaîne (comme mentionné par @guffa, il échouera si elle s'affiche elle-même contenue Remarque: && code> ou
: code>):
Trim () code> n'est pas disponible sur les anciens navigateurs, vous devez ajouter ce bit de code avant celui ci-dessus [src] em> : p>
Vous avez raison, j'ai pensé à cela, mais lisez ce que vous avez dit au-dessus de votre réponse, alors je pensais que quelqu'un d'autre a fait référence à cela, je ne suis pas obligé, mais je devrais éditer sans faire référence à cela aussi, merci.
Utilisez la fonction string.split pour casser la chaîne dans les pièces dont vous avez besoin - quelque chose comme ça ...
var input = "param1:'test1' && param2:'test2'"; var entries = input.split(" && "); var map = {}; var pattern = /'/g; for(var i=0; i < entries.length; i++){ var tokens = entries[i].split[":"]; map[tokens[0]] = tokens[1].replace(pattern, ""); }
C'est plutôt satisfaisant de voir que d'autres personnes sont arrivées à presque exactement la même solution - doivent passer un certain temps à comprendre la réponse fournie par Andy E, comme je n'ai jamais vu String.Replac utilisé avec une fonction de deuxième paramètre. Peut-être que Andy e pourrait étendre sa réponse au profit d'autres comme moi.
C'est beaucoup comme une regex EXEC () i>, sauf qu'il n'y a pas de boucle et que vous nommez les sous-captures dans leur propre fermeture privée. C'est pourquoi j'ai lié à l'article où John Resig a inventé le terme et a expliqué la méthode :-)
@Guffa - Très vrai, c'est pourquoi la réponse fournie par Andy E est intéressante.
@Andy e - n'a pas repéré le lien. Merci de le pointer de la sortie - à l'aide d'une fonction qui renvoie une chaîne, au lieu d'une chaîne est facile à comprendre, mais je ne savais pas que la fonction a certains aspects de la recherche de REGEXP transmise à celle-ci. Comme d'habitude, M. Cosig sait le mieux. :-)