正则表达式关键字过滤

时间:2015-03-17 11:45:49

标签: javascript regex keyword-search

我尝试使用正则表达式构建搜索,该表达式使用特定术语来分割和过滤搜索查询。例如,如果我有一个类似的查询: artist rolling stones track stupid girl track paint it black,它将拉出滚石乐队的专辑并将曲目愚蠢的女孩画上黑色。理想情况下(经过一些处理后)我将数据发送到服务器,如下所示:{ artists : ['rolling stone'], tracks : ['stupid girl', 'paint it black'] }

我有一个基本的正则表达式,它匹配关键字(艺术家/曲目)和关键字后面的第一个单词(滚动/愚蠢/绘画),但是如果我使它与空格和后面的单词匹配,它只匹配整个字符串。

这是我目前拥有的正则表达式:(artist|track)\s([\w]+)。我猜我需要使用停用词或其他东西来创建短语之间的边界,但我对建立正则表达式没有超级经验。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

use strict;
use warnings;
$string =~ s{artist\s*((?:(?!track|$).)+)track\s*((?:(?!track|$).)+)(?:track((?:(?!track|$).)+))?}{artists : ['$1'], tracks : ['$2','$3']}ig;

试试此代码。

使用这个正则表达式

artist\s*((?:(?!track|$).)+)track\s*((?:(?!track|$).)+)(?:track((?:(?!track|$).)+))?

取代:

artists : ['$1'], tracks : ['$2','$3']

答案 1 :(得分:3)

(artist|track).*?(?=artist|track|$)

试试这段代码