正则表达式不允许某个字符,除非它被转义。

3

以下是用于解析逗号分隔键值对的正则表达式:

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个回答

1
您可以使用这个:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接