javascript - YouTube 正则表达式 : Tested to pick up both video and playlist ID, 但 Node.js 不会

标签 javascript regex node.js hyperlink youtube

我有以下正则表达式,它已经在三个不同的网站上进行了测试,可以匹配所有 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

Regular expression visualization

Debuggex Demo

我的实际代码:

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/

相关文章:

java - 如何在 Struts 2 中处理表单上的索引属性按钮

node.js - 子目录中带有 NGINX 的多 Node 应用程序

c# - 正则表达式不匹配任何html标签

python - 快速检查 Markdown 中单词的方法?

node.js - 在一个应用程序中一起使用 express 和 restify 的 Node js

javascript - 如何获取在 Discord.js 中发消息的用户的角色?

javascript - 运行javascript后如何截取网页截图

javascript - Leaflet.js - 使用 slider 将不透明度设置为 LayerGroup

javascript - Jquery Form - 在数组中存储答案

javascript - 在javaScript中获取Div的最外层父id