用于解析关键字和标签([])的搜索字段的正则表达式

时间:2012-09-29 21:25:11

标签: javascript regex search

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

  • 用括号分隔的解析标记
  • 解析以空格分隔的关键字

但是,我完全不了解正则表达式。我甚至不知道正则表达式是否可行。

例如:

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

不幸的是,由于搜索regex search tags会返回HTML问题,因此我发现搜索任何帮助都很困难

2 个答案:

答案 0 :(得分:1)

认为你需要这样的东西:

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

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

在这里试试:

http://refiddle.com/85o

解释:

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

下一位[([^]] *)]匹配一个标签:开始和结束方括号需要用反斜杠进行转义以使它们成为文字。方括号内的位用括号()括起来,以捕获第一个捕获组中的文本。 [^ ...]位匹配除插入符号后列出的内容之外的任何内容 - 因此在这种情况下除了关闭方括号之外的任何内容。使用*。

贪婪地重复这一过程

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

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

答案 1 :(得分:0)

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

var tags= "search field [search][search-query] [search-string]".match(/\[(.*?)\]/g);
// tags= ["search", "search-query", "search-string"]