自定义正则表达式过滤掉最后一个url路径中的ID

时间:2015-10-16 12:14:11

标签: javascript regex node.js

我有两种类型的网址路径名称

https://www.youtube.com/watch?v=RlQEoJaLQRA

https://www.youtube.com/sPfJQmpg5z

正如您所看到的那样,watch?v=前置

我在node.js url.parse(mydata.imageurl).pathname中的当前解析器只会得到最后一个url路径的第一个单词,但是我需要实现正则表达式,因此它会过滤掉这两个中的视频ID(RlQEoJaLQRA和sPfJQmpg5z)案件。

我可以使用此自定义正则表达式来实现它吗?

更新

我已经尝试过我的代码结构中的一个答案给出的正则表达式,但结果有点偏。我想这是因为我的链接方式就像这样? data.list[item].given_url.match(regexp)

    var video = [];
    var regexp = /[watch\]?[v=]?(\w+)$/i;

    Object.keys(data.list).forEach(function(item) {
        video.push({
            title : data.list[item].resolved_title,
            videoID : data.list[item].given_url.match(regexp)
        })
    })

2 个答案:

答案 0 :(得分:1)



var regexpr = /^https?:\/\/www\.youtube\.com\/(watch\?v=)?(.*)$/i;

var re1 = 'https://www.youtube.com/watch?v=RlQEoJaLQRA'.match(regexpr)
console.log(re1[2]); // RlQEoJaLQRA

var re2 = 'https://www.youtube.com/sPfJQmpg5z'.match(regexpr);
console.log(re2[2]); // sPfJQmpg5z




答案 1 :(得分:1)

更新了正则表达式

var a = 'https://www.youtube.com/watch?v=RlQEoJaLQRA';
var b = 'https://www.youtube.com/sPfJQmpg5z';
var c = 'https://youtu.be/U-hzefHdAMk';
var getVideoId = function(src) {
  var regexp = /[watch\/v=]?([\w|\-]+)$/i;
  return src.match(regexp)[1];
};

getVideoId(a);输出" RlQEoJaLQRA",getVideoId(b);输出" sPfJQmpg5z"和getVideo(c);输出" U-hzefHdAMk"。