我有以下正则表达式,它已经在三个不同的网站上进行了测试,可以匹配所有 YouTube 链接,还可以捕获视频 ID 和可选的播放列表 ID。尽管如此,我的 Node 应用程序除了视频 ID 之外什么都没有:
/(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((?:\w|-|_){11})(?:(?:\?|\&)index=((?:\d){1,3}))?(?:(?:\?|\&)list=((?:\w|-|_){24}))?(?:\S+)?/g
我的实际代码:
var youtube = /(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((?:\w|-|_){11})(?:(?:\?|\&)index=((?:\d){1,3}))?(?:(?:\?|\&)list=((?:\w|-|_){24}))?(?:\S+)?/g;
ansCopy = ansCopy.replace(youtube, "^~$1~^~$3~^");
使用“http://www.youtube.com/watch?v=VWKdcalZTaA&list=UUlucBMqhrYW4PWuIp8Um_cg&index=46”作为测试字符串,这应该产生字符串:
"^~VWKdcalZTaA~^~UUlucBMqhrYW4PWuIp8Um_cg~^"
但它会产生:
"^~VWKdcalZTaA~^~~^"
最佳答案
这是一个 URL,为什么不使用 Node.js URL 模块。
var url = require('url');
var youtube = url.parse('http://www.youtube.com/watch?v=VWKdcalZTaA&list=UUlucBMqhrYW4PWuIp8Um_cg&index=46');
/*{
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.youtube.com',
port: null,
hostname: 'www.youtube.com',
hash: null,
search: '?v=VWKdcalZTaA&list=UUlucBMqhrYW4PWuIp8Um_cg&index=46',
query: 'v=VWKdcalZTaA&list=UUlucBMqhrYW4PWuIp8Um_cg&index=46',
pathname: '/watch',
path: '/watch?v=VWKdcalZTaA&list=UUlucBMqhrYW4PWuIp8Um_cg&index=46',
href: 'http://www.youtube.com/watch?v=VWKdcalZTaA&list=UUlucBMqhrYW4PWuIp8Um_cg&index=46'
}*/
var query = querystring.parse(youtube.query);
/*{
v: 'VWKdcalZTaA',
list: 'UUlucBMqhrYW4PWuIp8Um_cg',
index: '46'
}*/
关于javascript - YouTube 正则表达式 : Tested to pick up both video and playlist ID, 但 Node.js 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445157/