javascript - 如何匹配引号内的搜索词

标签 javascript regex string search

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

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/

相关文章:

javascript - 使 JavaScript 辅助函数将文本与正则表达式动态匹配

javascript - Ajax 在同一请求中发送数组和图像

java - 如何将正则表达式分配给某些枚举

c++ - 到达主程序之前出现段错误 - C++

javascript - Angular 插值系统中的点(嵌套)表示法

javascript - 如何制作显示事件时间的刻度?

Java正则表达式在多个目录中查找文件

用于从 URL/网站获取带有子域的域的 PostgreSQL 正则表达式

string - 亚马逊 DynamoDb 数据库

java - 在Java中的字符串中查找第二次出现的子字符串