首页 > 解决方案 > 在向前看之前只捕获最接近的匹配

问题描述

我在字符串中有一堆 JSON 格式的播放列表数据。它非常大,我正在用它做很多处理,所以我试图从它中提取信息作为一个字符串,而不是把它变成一个 JavaScript 对象。

我正在尝试获取包含某些歌曲名称的每个播放列表的播放列表名称。例如,如果我正在寻找,我正在尝试获取playlist 1以下playlist 3字符串song 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

标签: javascriptregexregex-lookarounds

解决方案


(?=.*song 1)只需在你的正则表达式中用这个(?=[^\]]+song 1)和那个替换它。

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

演示


推荐阅读