2016-11-07 49 views
2

下面是我正則表達式來解析逗號分隔的鍵 - 值對:正則表達式不允許的字符除非轉義

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

出於示例的結果:

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

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

我想擴展此功能,以允許值包括轉義逗號,等號和轉義字符本身。這樣的結果是:

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

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

我該怎麼做?謝謝,Moshe。

回答

0

您可以使用此:

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

我建立了一個甚至不需要逃避\,逗號區分它們的模式。

如果我們可以假設你鍵不包含逗號,不像值,如:

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

那麼下列指令模式將工作得很好:

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

你可以在這裏玩:https://regex101.com/r/RX4RsR/2