在向前看之前仅捕获最接近的匹配项

时间:2019-02-17 19:22:03

标签: javascript regex regex-lookarounds

我在字符串中有一堆JSON格式的播放列表数据。它很大,并且我要对其进行大量处理,因此我试图从字符串中提取信息,而不是将其转换为JavaScript对象。

我正在尝试获取包含某些歌曲名称的每个播放列表的播放列表名称。例如,如果我要查找playlist 1,则尝试获取以下字符串的playlist 3song 1

{"playlist 1":["song 3","song 1"],"playlist 2":["song 2"],"playlist 3":["song 1"]}

为此,我正在使用以下正则表达式:

"([^"]*?)":(?=.*song 1)

但这会捕获song 1之前的所有播放列表名称,而不仅仅是song 1之前的最直接播放列表名称。

如何仅捕获与向前看最接近的一个?为此,我尝试过用否定的眼光,但无法正常工作。

https://regex101.com/r/gW2cL1/15

1 个答案:

答案 0 :(得分:3)

只需在您的正则表达式中将此(?=.*song 1)替换为(?=[^\]]+song 1)就可以了。

"([^"]*?)":(?=[^\]]+song 1)

DEMO