1

我正在尝试实现类似于 Stackoverflow 的搜索输入(在 node.js/javascript 中)。

  • 解析由括号分隔的标签
  • 解析由空格分隔的关键字

但是,我根本不懂正则表达式。我什至不知道正则表达式是否可行。

例如:

search field [search][search-query] [search-string]
// keywords: ['search', 'field']
// tags: ['search', 'search-query', 'search-string']

不幸的是,我发现很难在这方面搜索任何帮助,因为搜索regex search tags返回 HTML 问题

4

2 回答 2

1

认为你需要这样的东西:

/(?:\[([^\]]*)\]|([^\s]+))/g

您可以重复应用它(例如使用 Javascript exec 方法),然后从第一个和第二个捕获组中提取值以分别捕获标签和关键字。

在这里尝试一下:

http://refiddle.com/85o

解释:

最外面的 () 括号包含一个匹配标签(由方括号 [] 括起来)或关键字(不被方括号括起来)的选项。?: 位从捕获组中排除此选择位,因为我们需要明确知道匹配的表达式是标签还是关键字,因此需要为每个单独的捕获组。

下一位 [([^]]*)] 匹配一个标签:开始和结束方括号需要用反斜杠转义以使其成为文字。方括号内的位包含在普通括号 () 中,以捕获第一个捕获组中的文本。[^...] 位匹配除插入符号后列出的内容之外的任何内容 - 因此在这种情况下,除了右方括号之外的任何内容。使用 * 贪婪地重复此操作。

该| 分隔选择,然后我们有一个关键字的匹配表达式:([^\s]+)。同样,这在括号中以使结果出现在捕获组中。这次我们匹配除了空格之外的任何东西一次或多次。

最后 /g 是全局修饰符,以便匹配所有匹配项。

于 2012-09-29T21:51:55.123 回答
0

以下代码从字符串中检索标签作为数组:

var tags= "search field [search][search-query] [search-string]".match(/\[(.*?)\]/g);
// tags= ["search", "search-query", "search-string"]
于 2012-09-29T21:53:13.413 回答