1

假设我有以下字符串:

KEYWORD_1 OR "KEYWORD COMPOSITE_2" NOT "KEYWORD COMPOSITE_3" NOT "KEYWORD_4" AND "KEYWORD_5" KEYWORD_6 KEYWORD_7 KEYWORD_8 -KEYWORD_9

结果(这不是 JSON 格式,只是解释输出的视觉格式)我想用我的正则表达式得到的结果是将字符串拆分为以下三个关键字数组,每个关键字对应一个分隔符(AND , OR, NOT) 并包含每次出现分隔符之后的所有单词。把它想象成谷歌搜索字段语法:):

final_result = {
    {
        OR: [KEYWORD_COMPOSITE_2]
    },
    {
        AND: [
            KEYWORD_1, 
            KEYWORD_5, 
            KEYWORD_6, 
            KEYWORD_7, 
            KEYWORD_8
        ]
    },
    {
        NOT: [
            KEYWORD_COMPOSITE_3, 
            KEYWORD_4, 
            KEYWORD_9
        ]
    }
}

我正在尝试使用一个或多个正则表达式在 javascript 中执行此操作。

任何的想法 ?有什么帮助吗?谢谢你

4

1 回答 1

1

您不能仅使用正则表达式来做到这一点,仍然需要一些编程:

function parse(input) {
    var keywords = ['AND', 'OR', 'NOT'];
    var result = {}, kw = 'AND';
    input.replace(/"(.+?)"|(\w+)/g, function($0, $1, $2) {
        if(keywords.indexOf($2) >= 0) {
            kw = $2;
        } else {
            if(!(kw in result))
                result[kw] = [];
            result[kw].push($1 || $2);
        }
    });
    return result;
}
于 2013-07-18T13:31:39.513 回答