2016-11-07 6 views
2

unten ist mein regex Comma Separated Schlüssel-Wert-Paare zu analysieren: das ErgebnisRegEx nicht zulassen ein Zeichen entkommen, es sei denn

function extractParams(str) { 
    var result = {}; 
    str.replace(/\s*([^=,]+)\s*=\s*([^,]*)\s*/g, function(_, a, b) { result[a.trim()] = b.trim(); }); 
    return result; 
} 

Zum Beispiel:

extractParams("arg1 = value1 ,arg2 = value2 ,arg3=uuu") 

ist {"arg1":"value1","arg2":"value2","arg3":"uuu"}.

Ich möchte diese Funktion so erweitern, dass die Werte Escaped-Kommas, Gleichheitszeichen und das Escape-Zeichen selbst enthalten. So dass das Ergebnis:

extractParams("arg1 = val\,ue1 ,arg2 = valu\=e2, arg3= val\\ue3") 

wird

{"arg1":"val,ue1","arg2":"valu=e2","arg3":"val\ue3"} sein.

Wie kann ich das tun? Danke, Moshe.

Antwort

0

Sie können diese verwenden:

function extractParams(str) { 
 
    var result = {}; 
 
    str.replace(/\s*((?:\\[,\\=]|[^,\\=]*)+)\s*=\s*((?:\\[,\\=]|[^,\\=]*)+)\s*/g, function(_, a, b) { result[a.trim()] = b.trim(); }); 
 
    return result; 
 
} 
 

 
console.log(extractParams("arg1 = val\\,ue1 ,arg2 = valu\\=e2, arg3= val\\\\ue3"));

0

ich ein Muster gebaut, die nicht einmal brauchen könnte entkommen \, Kommas sie auseinander zu halten.

Wenn wir davon ausgehen, dass Ihre Schlüssel enthalten keine Kommas, im Gegensatz zu den Werten, wie sie in:

ke y=,val,ue! ist OK
k,ey=val,ue KO ist

Dann wird das folgende Muster funktioniert sehr gut:

([^,]+)=(.+?)(?:(?=,[^,]+=)|$) 

Sie können damit spielen: https://regex101.com/r/RX4RsR/2

Verwandte Themen