我正在尝试解析搜索词。搜索词是一个长字符串,例如:

label:none author:@root label:~"To+Do" label:~'"test me"' label:~"No Label" label:~'won"t fix' this is a search term


我正在尝试将其解析为单个键值对:

[{label: "none"}, {author:"@root"}, {label:"~\"To+Do\""}, {label: "~"test me\""}, {label: "~\"No Label\""}, {label: "~won\"t fix"}, {search: "this is a search term"}]


搜索词是没有键的最后一项。如果搜索词有空格,则将它们用引号引起来。

我开始通过执行以下操作来解析此问题:

(label:.*?|author:.*?|milestone:.*?)


我不确定这是否行得通,但是我对如何获取最后一个搜索词也感到困惑。甚至不确定这是否可行。

最大的问题是引用的东西,但我不确定如何匹配引用的东西。最后,我想做的是用空格分割字符串,而忽略空格周围的引号。

我将@用于作者,将~用于标签,将%用于里程碑。

最佳答案

这似乎可行...我也将输出结构转换为更易于使用的东西:



term = `label:none author:@root label:~"To+Do" label:~'"test me"' label:~"No Label" label:~'won"t fix' this is a search term`

re = /(\w+):([~%@]?)(?:"(.*?)"|'(.*?)'|(\S+))/g;

opts = [];

term = term.replace(re, function (_, prop, operator, v1, v2, v3) {
    opts.push({prop, operator, value: v1 || v2 || v3});
    return '';
});

opts.push({search: term.trim()});

console.log(opts);

关于javascript - 如何在报价中匹配搜索词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41126586/

10-12 18:09