求可提取YouTube频道标识的JavaScript正则表达式(含别名格式)
JavaScript正则表达式提取YouTube频道标识(含@别名格式)
方案实现
直接用下面的正则表达式可以覆盖你列出的所有URL格式,同时自动忽略附加路径、查询参数和锚点:
const channelRegex = /^(?:https?:\/\/)?(?:www\.)?youtube\.com\/(?:c\/|channel\/|@)?([^/?#]+)/i;
使用示例
封装成函数方便调用:
function getYouTubeChannelId(url) { const match = url.match(channelRegex); return match ? match[1] : null; } // 测试你的所有用例 console.log(getYouTubeChannelId('https://www.youtube.com/c/coca-cola')); // 输出: coca-cola console.log(getYouTubeChannelId('https://www.youtube.com/channel/UCosXctaTYxN4YPIvI5Fpcrw')); // 输出: UCosXctaTYxN4YPIvI5Fpcrw console.log(getYouTubeChannelId('https://www.youtube.com/@coca-cola')); // 输出: coca-cola console.log(getYouTubeChannelId('https://www.youtube.com/coca-cola')); // 输出: coca-cola console.log(getYouTubeChannelId('https://www.youtube.com/@Coca-Cola/about')); // 输出: Coca-Cola console.log(getYouTubeChannelId('https://youtube.com/c/coca-cola?foo=bar#section')); // 输出: coca-cola
思路拆解
正则的每个部分作用如下:
^(?:https?:\/\/)?:匹配可选的HTTP/HTTPS协议,用非捕获分组避免多余的捕获结果(?:www\.)?:匹配可选的www.前缀,同样用非捕获分组youtube\.com\/:匹配YouTube域名,确保是目标网站的链接(?:c\/|channel\/|@)?:匹配三种频道路径前缀(/c/、/channel/、/@),可选且不捕获,只保留后面的标识部分([^/?#]+):核心捕获组,匹配除了/(路径分隔符)、?(查询参数开始)、#(锚点开始)之外的所有字符,自动截断后面的附加路径或参数/i:不区分大小写,兼容YouTube链接的大小写差异
可选优化:排除非频道链接
如果你需要避免误匹配视频、Shorts等非频道链接,可以给正则添加负向前瞻,排除常见的非频道路径:
const channelRegex = /^(?:https?:\/\/)?(?:www\.)?youtube\.com\/(?!watch|embed|shorts|playlist)(?:c\/|channel\/|@)?([^/?#]+)/i;
这个版本会跳过/watch、/embed、/shorts、/playlist开头的链接,只匹配频道类路径。
内容的提问来源于stack exchange,提问作者Toni
相关产品推荐
相关产品推荐

