首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spotify urls regex

Spotify urls regex
EN

Stack Overflow用户
提问于 2018-06-15 13:42:53
回答 3查看 4.3K关注 0票数 2

我和Regex有麻烦了。基本上,我想做的是把这两种类型的spotify urls中的任何一种作为播放列表。

https://open.spotify.com/user/spotify/playlist/37i9dQZF1DZ06evO2ZpGiQ?si=-6S0EBlURrao__YyIOW6bg

spotify:user:spotify:playlist:37i9dQZF1DZ06evO2ZpGiQ

并获取用户id,它将是这些URL的spotify,并希望获得播放列表id,它将是这些URL的37i9dQZF1DZ06evO2ZpGiQ

我也希望有一些正则表达式,以确保它是这些URL类型之一。

到目前为止,我已经尝试使用这个regex来检查它是否是spotify url:

^(spotify:|https:\/\/[a-z]+\.spotify\.com\/),但它只匹配顶部的URL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-15 13:58:30

在这里,我得到每个候选字符串的不可变部分,即第一个组中的https://open.spotify.com/user/spotify/playlistspotify:user:spotify:playlist,然后在第二个组中捕获播放列表id,其余部分可以忽略。

你可以在工作中看到它:https://regex101.com/r/tDtsTS/1

^(https:\/\/open.spotify.com\/user\/spotify\/playlist\/|spotify:user:spotify:playlist:)([a-zA-Z0-9]+)(.*)$

票数 1
EN

Stack Overflow用户

发布于 2018-06-16 11:19:12

对于给定的示例,您还可以使用替换|匹配用户id和播放列表id,在第一部分中,您还不希望捕获值并在捕获组([\/:])中捕获分隔符。然后您可以使用反向引用\1

然后,您可以引用相同的组号作为用户名和播放列表。用户名将在第2组中,播放列表在第3组中。

^(?:https:\/\/open\.spotify\.com|spotify)([\/:])user\1([^\/]+)\1playlist\1([a-z0-9]+)

详细信息

  • ^在行开始处的断言位置
  • (?:非捕获群
    • https:\/\/open\.spotify\.com匹配字面上(转义点\.来匹配它)
    • |
    • spotify匹配

  • )闭非捕获群
  • ([\/:])使用字符类捕获组中的/:,以便它可以与对该组的反向引用一起使用(组1)
  • user\1匹配user,后面是反向引用\1
  • ([^\/]+)使用否定字符类捕获用户id (组2),以匹配而不是正斜杠。
  • 使用两个反向引用的\1playlist\1匹配播放列表(如:playlist:/playlist/)
  • ([a-z0-9]+)捕获播放列表id (组3)

Regex演示

可以使用不区分大小写的标志/i来匹配大写字符和小写字符。

代码语言:javascript
复制
const strings = [
  'https://open.spotify.com/user/spotify/playlist/37i9dQZF1DZ06evO2ZpGiQ?si=-6S0EBlURrao__YyIOW6bg',
  'spotify:user:spotify:playlist:37i9dQZF1DZ06evO2ZpGiQ'
];
let regex = /^(?:https:\/\/open\.spotify\.com|spotify)([\/:])user\1([^\/]+)\1playlist\1([a-z0-9]+)/gi;
strings.forEach((str) => {
  while ((m = regex.exec(str)) !== null) {
    if (m.index === regex.lastIndex) {
      regex.lastIndex++;
    }
    console.log("user id: " + m[2]);
    console.log("playlist id: " + m[3]);
  }
});

票数 1
EN

Stack Overflow用户

发布于 2018-06-15 13:49:21

这相当容易,只需使用字符类。

工作示例:https://regex101.com/r/eQFWuR/1

Regex spotify[\/:]playlist[\/:](.+)[\s?]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50876850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档