除非转义,否则RegEx不允许使用某个字符

时间:2016-11-07 13:16:18

标签: javascript regex parsing arguments tokenize

下面是我的正则表达式来解析逗号分隔的键值对:

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。

2 个答案:

答案 0 :(得分: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"));




答案 1 :(得分:0)

我构建了一个模式甚至可能不需要转义\,逗号来区分它们。

如果我们可以假设您的键不包含逗号,则与值不同,如:

ke y = ,val,ue!可以 k,ey = val,ue是KO

然后以下模式将非常有效:

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

您可以在此处播放:https://regex101.com/r/RX4RsR/2