Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

Javascript 要解析搜索提示的正则表达式

Javascript 要解析搜索提示的正则表达式,javascript,regex,Javascript,Regex,我的regex-fu很糟糕。我想建立一个智能搜索,在那里我可以给搜索引擎提示在哪个属性上搜索什么 大概是这样的: > var s = "location: London, New York tags: Bar, Club"; > var splitted = s.split(/location: | tags: /); > splitted[1].split(', ') ["London", "New York"] > splitted[2].split(', ') ["

我的regex-fu很糟糕。我想建立一个智能搜索,在那里我可以给搜索引擎提示在哪个属性上搜索什么

大概是这样的:

> var s = "location: London, New York tags: Bar, Club";
> var splitted = s.split(/location: | tags: /);
> splitted[1].split(', ')
["London", "New York"]
> splitted[2].split(', ')
["Bar", "Club"]
搜索输入:位置:伦敦

->
[“伦敦”]

搜索输入:位置:伦敦,纽约

->
[“伦敦”、“纽约”]

搜索输入:位置:伦敦标签:酒吧

->
[“伦敦”]

->
[“Bar”]

搜索输入:位置:伦敦,纽约标签:酒吧,俱乐部

->
[“伦敦”、“纽约”]

->
[“酒吧”、“俱乐部”]


我想知道正则表达式应该如何像那样解析用户输入?

如果您只是拆分字符串,如下图所示:

> var s = "location: London, New York tags: Bar, Club";
> var splitted = s.split(/location: | tags: /);
> splitted[1].split(', ')
["London", "New York"]
> splitted[2].split(', ')
["Bar", "Club"]

我会用一点正则表达式和Split

var input = 'location: London, New York tags: Bar, Club'; // example

var arrays = input.split(/\s*\w+:\s*/);

arrays.forEach(function (val, idx, arr) {
    arr[idx] = val.split(/,\s*/);
});

我最终使用了一种不同的方法。也许只是我没有正确地得到其他的答案,但对我来说,似乎没有办法分辨出哪个目标词属于哪个键

如果
地点:伦敦、纽约标签:酒吧、俱乐部

将切换到
标签:酒吧、俱乐部地点:伦敦、纽约

我现在如何确定哪些目标词属于
位置
,哪些属于
标记

所以我所做的是:

var locationMatch = searchString.match(/location:(((?!tags:)[-A-Za-z0-9, ])+)/);
//locationMatch[1] are the target words for "location"

var tagsMatch = searchString.match(/tags:(((?!location:)[-A-Za-z0-9, ])+)/);
//tagsMatch[1] are the target words for "tags"
我想有一个更简单的方法,但我还远远不是一个正则表达式专家