PEG js:如何在peg js语法规则表达式中的单引号内匹配字符串?

问题描述

我正在编写一个peg js语法,以将逻辑查询文字解析为json格式,但是在条件值中选择多值字时遇到了问题。就像(city ='a'OR city ='b')正常工作一样,但(city ='ab'OR city ='b')无法正常工作是因为它具有第一个条件的多字值。 我有一个正则表达式'((?:''| [^'])*)',它可以匹配单引号值内的字符串,但是PEG js解析器无法解析它。>

有人可以帮助我实现这一目标吗? 以下是我的语法: 在线编译器:https://pegjs.org/online 输入:(城市='a b'或城市='b') 语法:

Set = col: Column right: (_ 'in'
    i_ '('
    Series ')') {
    return {
        column: col,operator: right[1],value: right[4].split(','),conditions: []
    }
}
Series = left: Column right: (_ ','
    _(Series / Column)) ? {
    if (right) {
        var leftValue = left.slice(1).substring(0,left.length - 2);
        var rightValue = right[3];
        return leftValue + ',' + rightValue;
    } else {
        var leftValue = left.slice(1).substring(0,left.length - 2);
        return leftValue;
    }
}
LogicalCondition = left: LogicalSeparator right: (_('AND'
    i / 'OR') _ LogicalSeparator) * {
    var conditions = right.reduce(function (result,element) {
        var condition = element[3];
        if (condition.groupCondition) {
            condition.groupOperator = element[1];
        }
        result.push(condition);
        return result;
    },[left]);
    if (right.length > 0) {
        return {
            "groupCondition": true,"conditions": conditions,"groupOperator": right[0][1]
        }
    } else if (left.groupCondition === true) {
        return left;
    } else {
        return {
            "groupCondition": true,"conditions": [left]
        }
    }
}
/ Set
LogicalSeparator = Set /
    "("
_ expr: LogicalCondition _ ")" {
    return expr;
}
/ Condition
Condition = left: Column right: (_('customequalto'
    i / 'customnotequalto'
    i / '='
    i / '!='
    i / 'contains'
    i / 'not contains'
    i / 'in'
    i / 'matches'
    i / 'not matches'
    i / 'is empty'
    i / 'is not empty'
    i / '<>') _ ConditionValue) * {
    var validColumns = Array.of('employee_name','city','disabled','birthDate','age');
    if (!validColumns.includes(left)) {
        error('invalid column name ' + left);
    }
    return right.reduce(function (result,element) {
        var valueText = right[0][3];
        return {
            conditions: [],column: left,operator: right[0][1],value: valueText.slice(1).substring(0,valueText.length - 2),};
    },left);
}
ConditionValue "string" = _['/A-Za-z0-9-_'] + {
    return text();
}
Column "string" = _['/A-Za-z0-9-_'] + {
    return text();
}
_ "whitespace" = [\t\ n\ r] *```

It would be a great help if you can help!.
Thank you in advance.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)