4

我的正则表达式 fu 很糟糕。我想建立一个智能搜索,我可以在其中向搜索引擎提供关于在哪个属性上搜索什么的提示。

像这样的东西:

搜索输入:地点:伦敦

->["London"]

搜索输入:地点:伦敦、纽约

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

搜索输入:地点:伦敦 标签:酒吧

->["London"]

->["Bar"]

搜索输入:地点:伦敦、纽约 标签:酒吧、俱乐部

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

->["Bar", "Club"]

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

4

3 回答 3

1

我会使用一点 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-07T06:56:53.753 回答
1

如果您只是拆分字符串怎么办,如下所示:

> 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-07T00:21:24.410 回答
0

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

如果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"

我想有一个更简单的方法,但我远不是一个正则表达式专家。

于 2013-09-07T23:00:38.790 回答