首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析搜索提示的Regex

解析搜索提示的Regex
EN

Stack Overflow用户
提问于 2013-09-07 00:07:15
回答 3查看 85关注 0票数 4

我的指令集很糟糕。我想要构建一个智能搜索,在那里我可以给搜索引擎一些提示,说明在哪个属性上搜索什么。

就像这样:

搜索输入:位置:伦敦

-> ["London"]

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

-> ["London", "New York"]

搜索输入:位置:伦敦标签:栏

-> ["London"]

-> ["Bar"]

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

-> ["London", "New York"]

-> ["Bar", "Club"]

我想知道regex应该如何解析这样的用户输入?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-07 00:21:24

如果你把绳子劈开,像这样:

代码语言:javascript
复制
> 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"]
票数 1
EN

Stack Overflow用户

发布于 2013-09-07 06:56:53

我会使用一点RegEx和Split。

代码语言:javascript
复制
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*/);
});
票数 1
EN

Stack Overflow用户

发布于 2013-09-07 23:00:38

最后我用了另一种方法。也许只是我没有得到正确的其他解决方案,但对我来说,似乎没有办法知道哪些目标词属于哪个键。

如果是location: London, New York tags: Bar, Club

将切换到tags: Bar, Club location: London, New York

我现在该如何选择location的目标词和tags的目标词

所以我所做的是:

代码语言:javascript
复制
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"

我想有一个更容易的方法,但我远不是一个裁判专家。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18668325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档