RegEx禁止字符,除非转义

RegEx disallow a character unless escaped

本文关键字:转义 禁止 字符 RegEx      更新时间:2023-09-26

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

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。

你可以这样做:

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"));

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

如果我们可以假设你的键不包含逗号,不像值,如:

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

那么下面的模式将非常有效:

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

你可以在这里玩它:https://regex101.com/r/RX4RsR/2