Javascript 正则表达式关键字过滤

Javascript 正则表达式关键字过滤,javascript,regex,keyword-search,Javascript,Regex,Keyword Search,我正在尝试使用正则表达式构建搜索,正则表达式使用特定的术语来分割和过滤搜索查询。例如,如果我有如下查询: 艺术家滚石乐队的曲目《愚蠢的女孩》将其涂成黑色,它将拿出滚石乐队的专辑,其中有《愚蠢的女孩》的曲目,并将其涂成黑色。理想情况下(经过一点处理后),我会像这样将数据发送到服务器:{artists:['rollingstone',tracks:['dumby girl','paint it black']} 我有一个基本正则表达式,它匹配关键字(artist/track)和关键字后的第一个单词(

我正在尝试使用正则表达式构建搜索,正则表达式使用特定的术语来分割和过滤搜索查询。例如,如果我有如下查询:
艺术家滚石乐队的曲目《愚蠢的女孩》将其涂成黑色
,它将拿出滚石乐队的专辑,其中有《愚蠢的女孩》的曲目,并将其涂成黑色。理想情况下(经过一点处理后),我会像这样将数据发送到服务器:
{artists:['rollingstone',tracks:['dumby girl','paint it black']}

我有一个基本正则表达式,它匹配关键字(artist/track)和关键字后的第一个单词(rolling/dumby/paint),但是如果我让它匹配空格和后面的单词,它只匹配整个字符串

这是我目前拥有的正则表达式:
(艺术家曲目)\s([\w]+)
。我猜我需要使用停止词或其他东西来创建短语之间的边界,但我在构建正则表达式方面不是很有经验。任何帮助都将不胜感激

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']
请尝试此代码。

使用此正则表达式

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

artists : ['$1'], tracks : ['$2','$3']
试试这个代码


试试这个代码

你能把你的输入和输出写清楚吗?输入:
艺术家滚石乐队的曲目《愚蠢的女孩》的曲目《把它涂成黑色》
。我希望正则表达式能够找到短语:“艺术家滚石”、“跟踪愚蠢女孩”、“跟踪将其涂成黑色”。在查询字符串中可以有无限数量的
艺术家名称
跟踪跟踪名称
短语。也可能没有音轨,或者只有一个艺术家,或者甚至相反。这对你来说足够清楚了吗?你能清楚地发布你的输入和输出吗?输入:
艺术家滚石赛道愚蠢女孩赛道把它涂成黑色
。我希望正则表达式能够找到短语:“艺术家滚石”、“跟踪愚蠢女孩”、“跟踪将其涂成黑色”。在查询字符串中可以有无限数量的
艺术家名称
跟踪跟踪名称
短语。也可能没有音轨,或者只有一个艺术家,或者甚至相反。这对你来说足够清楚了吗?好的,在我有一个艺术家和两首歌曲的非常具体的情况下,这是有效的。如果我有不同数量的曲目/艺术家呢?(艺术家|曲目)。*?(?=艺术家|曲目|$)试试这个好的,这样在我有一个艺术家和两首曲目的非常特殊的情况下就行了。如果我有不同数量的曲目/艺术家呢?(艺术家|曲目)。*?(?=艺术家|曲目|$)试试这个