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 形式ではなく、出力を説明するための単なる視覚的な形式です) 正規表現で取得したいのは、文字列を次の 3 つのキーワードの配列に分割することです。それぞれが区切り文字 (AND 、OR、NOT) であり、区切り文字のすべての出現に続くすべての単語が含まれています。Google 検索フィールドの構文のように考えてください :) :

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
        ]
    }
}

1 つ以上の正規表現を使用して 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 に答える