【问题标题】:Capturing only the closest match before a look ahead在向前看之前只捕获最接近的匹配
【发布时间】:2023-03-16 12:28:01
【问题描述】:

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

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

{"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

【问题讨论】:

    标签: javascript regex regex-lookarounds


    【解决方案1】:

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

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

    DEMO

    【讨论】:

    • 那行得通。我想太多了,当我遇到错误时通常是这样的 XD
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多