Javascript 用于解析关键字和标记([])的搜索字段的正则表达式
我试图实现一个类似于Stackoverflow的搜索输入(在node.js/javascript中)Javascript 用于解析关键字和标记([])的搜索字段的正则表达式,javascript,regex,search,Javascript,Regex,Search,我试图实现一个类似于Stackoverflow的搜索输入(在node.js/javascript中) 解析由括号分隔的标记 解析由空格分隔的关键字 然而,我一点也不懂正则表达式。我甚至不知道正则表达式是否是一种方法 例如: 搜索字段[搜索][搜索查询][搜索字符串] //关键词:[“搜索”,“字段”] //标记:[“搜索”、“搜索查询”、“搜索字符串”] 不幸的是,我发现在这方面搜索任何帮助都非常困难,因为搜索regex搜索标记会返回HTML问题我认为您需要这样的帮助: /(?:\[([^
- 解析由括号分隔的标记
- 解析由空格分隔的关键字
搜索字段[搜索][搜索查询][搜索字符串]
//关键词:[“搜索”,“字段”]
//标记:[“搜索”、“搜索查询”、“搜索字符串”]
不幸的是,我发现在这方面搜索任何帮助都非常困难,因为搜索
regex搜索标记
会返回HTML问题我认为您需要这样的帮助:
/(?:\[([^\]]*)\]|([^\s]+))/g
您可以重复应用它(例如,使用Javascript exec方法),然后从第一个和第二个捕获组中提取值,分别捕获标记和关键字
在这里尝试一下:
解释:
最外面的()括号包含匹配标记(由方括号[]括起)或关键字(不由方括号括起)的选项。:位从捕获组中排除此选择位,因为我们需要明确知道匹配的表达式是标记还是关键字,因此每个表达式都需要一个单独的捕获组
下一位[([^]]*])与标记匹配:开始和结束方括号需要用反斜杠转义,使其成为文字。方括号内的位包含在普通括号()中,用于捕获第一个捕获组中的文本。[^…]位匹配除插入符号后面列出的内容之外的任何内容-因此在本例中,除了右方括号之外的任何内容都匹配。这是贪婪地重复使用*
|分隔选项,然后我们得到关键字的匹配表达式:([^\s]+)。同样,这在括号中,以使结果显示在捕获组中。这一次,我们将匹配除空格以外的任何内容一次或多次
最后,/g是全局修饰符,以便匹配所有引用。您需要这样的内容:
/(?:\[([^\]]*)\]|([^\s]+))/g
您可以重复应用它(例如,使用Javascript exec方法),然后从第一个和第二个捕获组中提取值,分别捕获标记和关键字
在这里尝试一下:
解释:
最外面的()括号包含匹配标记(由方括号[]括起)或关键字(不由方括号括起)的选项。:位从捕获组中排除此选择位,因为我们需要明确知道匹配的表达式是标记还是关键字,因此每个表达式都需要一个单独的捕获组
下一位[([^]]*])与标记匹配:开始和结束方括号需要用反斜杠转义,使其成为文字。方括号内的位包含在普通括号()中,用于捕获第一个捕获组中的文本。[^…]位匹配除插入符号后面列出的内容之外的任何内容-因此在本例中,除了右方括号之外的任何内容都匹配。这是贪婪地重复使用*
|分隔选项,然后我们得到关键字的匹配表达式:([^\s]+)。同样,这在括号中,以使结果显示在捕获组中。这一次,我们将匹配除空格以外的任何内容一次或多次
最后,/g是全局修饰符,以便匹配所有出现的项。以下代码从字符串中检索标记作为数组:
var tags= "search field [search][search-query] [search-string]".match(/\[(.*?)\]/g);
// tags= ["search", "search-query", "search-string"]
以下代码以数组形式从字符串中检索标记:
var tags= "search field [search][search-query] [search-string]".match(/\[(.*?)\]/g);
// tags= ["search", "search-query", "search-string"]
嘿,这真是太棒了。我一会儿就想弄清楚你在干什么。一些问题:1)我假设输出是
[字符串匹配,标记字符串,单词字符串]
。2) 边缘大小写:word[tag]
应返回word
和[tag]
。这是一个简单的解决方案吗?还有一些类似于[未完成的
,未完成的]
和[标记[crap]]
的内容,但我们可以忽略这些内容,因为我已经编辑了答案以包含正则表达式的解释。希望这足以让你走…嘿,这真是太棒了。我一会儿就想弄清楚你在干什么。一些问题:1)我假设输出是[字符串匹配,标记字符串,单词字符串]
。2) 边缘大小写:word[tag]
应返回word
和[tag]
。这是一个简单的解决方案吗?还有一些类似于[未完成的
,未完成的]
和[标记[crap]]
的内容,但我们可以忽略这些内容,因为我已经编辑了答案以包含正则表达式的解释。希望这足以让你走。。。