我有两种类型的网址路径名称
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)
})
})
答案 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"。