获取 YT 视频、频道或无

Fetching YT video, channel or none

提问人:Elad Benda 提问时间:2/7/2022 更新时间:2/8/2022 访问量:35

问:

给定一个 url 列表,如何将其划分为 3 个总和列表?

一个用于 YT 视频,第二个用于 YT 频道,第三个用于所有其他视频?

const paragraph1 = 'www.youtube.com/watch?v=NsjeEt1ZpqQ';
const regex1 = /www.youtube.com/(\c*)(watch?v=)?<videoId>[A-Z,0-9])/gi;

const paragraph2 = 'https://www.youtube.com/channel/UCKqFqiCe1dCUxRe0_YNZ6gg';                                 
const regex2 = /www.youtube.com/channel/?<channelId>[A-Z,_,0-9])/gi;

const found = paragraph1.match(regex1);
console.log(found);
// expected output: Array ["T", "I"]

const found = paragraph2.match(regex2);
console.log(found);

试图在这个网站上进行沙盒。

JavaScript 正则表达式 模式 匹配

评论

0赞 Wiktor Stribiżew 2/7/2022
1) regex101.com/r/MpoNQs/1, 2) regex101.com/r/MpoNQs/2 和 3) regex101.com/r/MpoNQs/3
0赞 Elad Benda 2/7/2022
谢谢,你能把这个作为答案吗?我们能把它们组合成一个匹配短语吗?
1赞 Wiktor Stribiżew 2/7/2022
如果你需要得到三个不同的组,使用不同的正则表达式不是更有意义吗?

答:

0赞 Wiktor Stribiżew 2/8/2022 #1

由于您计划将某个 URL 字符串列表拆分为三个不同的部分,因此可以使用三种不同的模式:

www\.youtube\.com\/watch\?v=(?<videoId>\S+)
www\.youtube\.com\/channel\/(?<videoId>\S+)
www\.youtube\.com(?!\/(?:channel\/|watch\?v=))\S*

请参阅正则表达式 #1、正则表达式 #2 和正则表达#3 演示。请注意,您需要一个符合 ECMAScript 2018+ 的 JavaScript 环境才能使指定的捕获组正常工作。另外,看到点在它们表示文字点的地方被转义。

这些模式意味着

  • www\.youtube\.com\/watch\?v=- 文字字符串www.youtube.com/watch?v=
  • (?<videoId>\S+)- 组 “videoId”:一个或多个非空格字符
  • www\.youtube\.com\/channel\/(?<videoId>\S+)- 一个文本字符串,然后对“videoId”进行组,捕获一个或多个非空格字符www.youtube.com/channel/
  • www\.youtube\.com(?!\/(?:channel\/|watch\?v=))\S* - www.youtube.com字符串,然后是一个负 lookahead,如果紧挨着右边有一个字符,则 then 或 ,然后消耗零个或多个非空格字符,则匹配失败。/channel/watch?v=

如果您打算再次使用这些模式来标记一些标记文本,请确保从模式中减去标记字符,也就是说,将其更改为带有反向速记的否定字符类,并在 之后添加字符。比如说,如果链接在双引号内,请放在那里。\S[^\s]\s"[^\s"]