Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于解析关键字和标记([])的搜索字段的正则表达式_Javascript_Regex_Search - Fatal编程技术网

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

Javascript 用于解析关键字和标记([])的搜索字段的正则表达式,javascript,regex,search,Javascript,Regex,Search,我试图实现一个类似于Stackoverflow的搜索输入(在node.js/javascript中) 解析由括号分隔的标记 解析由空格分隔的关键字 然而,我一点也不懂正则表达式。我甚至不知道正则表达式是否是一种方法 例如: 搜索字段[搜索][搜索查询][搜索字符串] //关键词:[“搜索”,“字段”] //标记:[“搜索”、“搜索查询”、“搜索字符串”] 不幸的是,我发现在这方面搜索任何帮助都非常困难,因为搜索regex搜索标记会返回HTML问题我认为您需要这样的帮助: /(?:\[([^

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

  • 解析由括号分隔的标记
  • 解析由空格分隔的关键字
然而,我一点也不懂正则表达式。我甚至不知道正则表达式是否是一种方法

例如:

搜索字段[搜索][搜索查询][搜索字符串]
//关键词:[“搜索”,“字段”]
//标记:[“搜索”、“搜索查询”、“搜索字符串”]

不幸的是,我发现在这方面搜索任何帮助都非常困难,因为搜索
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]]
的内容,但我们可以忽略这些内容,因为我已经编辑了答案以包含正则表达式的解释。希望这足以让你走。。。