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

vshtjzan  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(153)

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

  • 分析由方括号分隔的标记
  • 分析以空格分隔的关键字

但是,我完全不懂regex。我甚至不知道regex是否是正确的方法。
例如:

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

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

qq24tv8q

qq24tv8q1#

我想你会需要这样的东西:

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

您可以重复使用它(例如:使用Javascript执行方法),然后从第一和第二捕获组中提取值以分别捕获标签和关键字。
解释如下:
最外面的()括号包含一个选择,可以匹配标记(由方括号[]括起)或关键字(未由方括号括起)。?:位从捕获组中排除了这个选择位,因为我们需要明确知道匹配的表达式是标记还是关键字,因此需要为每个表达式单独捕获组。
下一位[([^]]*)]匹配一个标签:需要用反斜杠转义开始方括号和结束方括号以使它们成为字面意义。方括号内的位被括在普通括号()中,以捕获第一个捕获组中的文本。[^...]位匹配除插入符号后列出的内容之外的任何内容-因此在本例中,除了右方括号之外的任何内容。这是重复贪婪使用 *。
该|分离选择,然后我们有一个关键字的匹配表达式:([^\s]+)。同样,这是在括号中,以使结果显示在捕获组中。这一次,我们将匹配除空格以外的任何内容一次或多次。
最后,/g是全局修饰符,以便匹配所有匹配项。

gblwokeq

gblwokeq2#

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

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

相关问题