You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配提取Spotify链接中的playlist id

从Spotify链接提取Playlist ID的正确实现

问题背景

需要从两种常见的Spotify播放列表链接中提取固定长度的Playlist ID:

  • 无查询参数的链接:https://open.spotify.com/playlist/1GXN1gZMuTlW5LjpTNJF2q
  • 带查询参数的链接:https://open.spotify.com/playlist/1GXN1gZMuTlW5LjpTNJF2q?si=d3fa4293e26049f8
    预期提取结果:1GXN1gZMuTlW5LjpTNJF2q

问题排查

你写的正则(?<=\/playlist\/)(.*)(?=\?|$)本身在大部分标准正则引擎中可以运行,但存在两个缺陷:

  1. .*为贪婪匹配,若链接中出现多个问号的极端场景,会匹配到最后一个问号位置,导致结果出错
  2. 部分低版本正则引擎对组合前瞻的支持不完善,可能出现匹配失败的情况

正确实现方案

推荐正则写法

优先使用兼容性更强、逻辑更简洁的两种写法:

  1. 环视匹配写法(适配所有支持固定长度正向后视的引擎,直接返回匹配结果,无需取分组):
    (?<=\/playlist\/)[^?]+
    
    逻辑说明:匹配/playlist/之后所有非问号的字符,自动截止到问号或字符串末尾,完全覆盖两种链接场景。
  2. 分组捕获写法(兼容性最高,适配所有正则引擎,取第1个捕获组内容即可):
    \/playlist\/([^?]+)
    

常用语言实现示例

Python示例

import re

url_list = [
    "https://open.spotify.com/playlist/1GXN1gZMuTlW5LjpTNJF2q",
    "https://open.spotify.com/playlist/1GXN1gZMuTlW5LjpTNJF2q?si=d3fa4293e26049f8"
]
pattern = re.compile(r'\/playlist\/([^?]+)')

for url in url_list:
    res = pattern.search(url)
    if res:
        print(res.group(1))
# 输出均为:1GXN1gZMuTlW5LjpTNJF2q

JavaScript示例

const urlList = [
    "https://open.spotify.com/playlist/1GXN1gZMuTlW5LjpTNJF2q",
    "https://open.spotify.com/playlist/1GXN1gZMuTlW5LjpTNJF2q?si=d3fa4293e26049f8"
]
const pattern = /\/playlist\/([^?]+)/

urlList.forEach(url => {
    const res = url.match(pattern)
    if (res) console.log(res[1])
})
// 输出均为:1GXN1gZMuTlW5LjpTNJF2q

内容的提问来源于stack exchange,提问作者Kishan Sripada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:15:04