我正在尝试匹配此网址:
https://play.spotify.com/user/randomuser/playlist/71ljVu3Ejccu2PzW6iXv0G
随机用户和结束ID正在发生变化。
我想验证该url确实是一个play.spotify.com链接并匹配该格式。
我有这个javascript函数:
var verify = function(url){
var re = new RegExp("(https:\/\/play.spotify.com\/user\/\w+?\/playlist\/\w+)", "g");
var result = re.exec(url);
console.log(result);
}
verify("https://play.spotify.com/user/useruser/playlist/71ljVu3Ejccu2PzW6iXv0G");
当我使用正则表达式测试器测试时,它似乎正常工作:
然而,console.log的输出只是null
。
我在javascript中做错了什么?为什么网址不匹配?
答案 0 :(得分:5)
"(https:\/\/play.spotify.com\/user\/\w+?\/playlist\/\w+)"
您在此处转义字符/
和w
,这在字符串文字中是不必要的。你的字符串相当于
"(https://play.spotify.com/user/w+?/playlist/w+)"
显然现在不是你正在寻找的正则表达式。
Don't use the RegExp
constructor, use a regex literal:
var re = /(https:\/\/play.spotify.com\/user\/\w+?\/playlist\/\w+)/g;
如果您出于某种原因确实需要使用new RegExp
,则必须转义字符串中的反斜杠字符:new RegExp("(https://play.spotify.com/user/\\w+?/playlist/\\w+)", "g")
。
答案 1 :(得分:1)
您不需要使用RegExp
构造函数,并且可以使用string.match(regex)
函数来获取结果:
var verify = function(url) {
var regex = /https:\/\/play.spotify.com\/user\/\w+?\/playlist\/\w+/g;
var result = url.match(regex);
console.log(result);
};
// Passes, logs the URL:
verify("https://play.spotify.com/user/useruser/playlist/71ljVu3Ejccu2PzW6iXv0G");
// Fails, logs null
verify("https://play.spotify.com/useruser/playlist/71ljVu3Ejccu2PzW6iXv0G");
请参阅jsBin