2017-01-05 7 views
0

Je reçois une entrée d'utilisateur sous la forme deExpression régulière pour évaluer chaîne suivante

clé1 = valeur1, clé2 = valeur2, key3 = value3

et il peut y avoir un certain nombre de clés paires de valeurs,

J'ai écrit l'expression régulière suivante pour évaluer la chaîne ci-dessus.

[a-z0-9]+(:|=)[a-z0-9]+ 

mais je ne suis pas si sûr, comment vérifier le multiple de paires de valeurs clés, cette chaîne, je l'ai écrit peut évaluer une paire de valeurs clés, je le veux faire évaluer la chaîne de trou de paires de valeurs clés. très reconnaissant de tout conseil sur ce

Répondre

1

Essayez

([a-z0-9]+(:|=)[a-z0-9]+,?)+ 

Pour supprimer une fuite par des virgules

if(str.substr(-1) === ',') 
    str = str.substr(0, str.length - 1) 
+0

merci pour la solution, la dernière virgule ne doit pas être présente à la fin de la dernière paire de valeur clé, comment mettre la contrainte sur ce – KItis

1

Essayez cette regex (\w+)[:=](\w+),?, dans lequel le groupe 1 correspond à la clé et le groupe 2 correspond aux valeurs.

Vous pouvez également utiliser split, cela pourrait être plus rapide.

var input = "your input"; 
var pairs = input.split(",") 
for (i = 0; i < pairs.length; i++) { 
    var parts = pairs[i].split(/[:=]/); 
    var key = parts[0]; 
    var value = parts[1] 
} 

Ne pas oublier upvote et accepter :)

+0

solution, la dernière virgule ne devrait pas être présent à la fin de la dernière paire de valeur clé, comment mettre la contrainte sur cela – KItis

+0

Que voulez-vous dire, vous voulez supprimer la virgule supplémentaire à la fin? –

1

Une approche commune consiste à (ab) utiliser replace pour faire le travail d'un seul coup:

str = "key1=value1,key2=value2,key3=value3" 
 

 
re = /(\w+)[:=](\w+)/g 
 

 
obj = {} 
 

 
str.replace(re, (_, $1, $2) => obj[$1] = $2) 
 

 
console.log(obj)