2016-01-24 165 views
0

我需要创建一个函数来检查字符串是否是Spotify URL。我做了一个简单的if语句来检查字符串是否包含Spotify URL的一部分,它的工作原理,但它是废话。有人可以让我更好地使用正则表达式或其他方法。检查字符串是否是Spotify URL

if (input.indexOf('spotify:') > -1 || input.indexOf('spotify.com') > -1) { 
    console.log('url'); 
} 

Spotify的网址进来这三种形式:

https://play.spotify.com/user/spotifydiscover/playlist/0vL3R9wDeAwmXTTuRATa14 
https://open.spotify.com/track/1TZ3z6TBztuY0TLUlJZ8R7 
spotify:track:1TZ3z6TBztuY0TLUlJZ8R7 
+0

你想知道,如果URL是一首曲目/专辑/艺术家吗?或只是一个链接到spotify.com? –

+0

感谢您的回答。通缉只是第一部分,但很高兴知道它是哪一个。 – mhlavacka

+0

更新了我的答案,展示了如何抓取网址段。 –

回答

6
/^(spotify:|https://[a-z]+\.spotify\.com/)/ 

http://www.regexr.com/3cl88

通过适当的JS逃逸,因为在相当长的一段斜线该再次:

var url = 'https://open.spotify.com/track/1TZ3z6TBztuY0TLUlJZ8R7'; 
console.log(/^(spotify:|https:\/\/[a-z]+\.spotify\.com\/)/.test(url)); 
// Outputs 'true' 
2

匹配:

var input = 'https://play.spotify.com/user/spotifydiscover/playlist/0vL3R9wDeAwmXTTuRATa14'; 
if(/\.spotify\.com/.test(input)) 
{ 
    // contains spotify 
} 
+0

尝试我的字符串:“http://example.com/this.is.not.spotify.com.html” – Gavriel

+0

请注意。 (点)匹配任何单个字符。这也匹配你的正则表达式:“-spotify-com” –

1

要测试的网址与openplay使用开始:

> var url = 'https://play.spotify.com/user/spotifydiscover/playlist/0vL3R9wDeAwmXTTuRATa14'; 
> var re = /((open|play)\.spotify\.com\/)/; 
> console.log(re.test(url)); 
< true 

使用match()可以检索URL的格式。

> console.log(url.match(re)); 
< ["play.spotify.com/", "play.spotify.com/", "play"] 

或者:

> console.log(url.match(re)[2]); 
< "play"