Javascript正则表达式返回null

时间:2015-06-22 17:44:12

标签: javascript regex

我正在尝试匹配此网址:

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");

当我使用正则表达式测试器测试时,它似乎正常工作:

enter image description here

然而,console.log的输出只是null

我在javascript中做错了什么?为什么网址不匹配?

2 个答案:

答案 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