我的指令集很糟糕。我想要构建一个智能搜索,在那里我可以给搜索引擎一些提示,说明在哪个属性上搜索什么。
就像这样:
搜索输入:位置:伦敦
-> ["London"]
搜索输入:位置:伦敦,纽约
-> ["London", "New York"]
搜索输入:位置:伦敦标签:栏
-> ["London"]
-> ["Bar"]
搜索输入:位置:伦敦,纽约标签:酒吧,俱乐部
-> ["London", "New York"]
-> ["Bar", "Club"]
我想知道regex应该如何解析这样的用户输入?
发布于 2013-09-07 00:21:24
如果你把绳子劈开,像这样:
> 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"]发布于 2013-09-07 06:56:53
我会使用一点RegEx和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*/);
});发布于 2013-09-07 23:00:38
最后我用了另一种方法。也许只是我没有得到正确的其他解决方案,但对我来说,似乎没有办法知道哪些目标词属于哪个键。
如果是location: London, New York tags: Bar, Club
将切换到tags: Bar, Club location: London, New York
我现在该如何选择location的目标词和tags的目标词
所以我所做的是:
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"我想有一个更容易的方法,但我远不是一个裁判专家。
https://stackoverflow.com/questions/18668325
复制相似问题