Javascript格式数组与正则表达式youtube视频id

Javascript format array with regex youtube video ids

本文关键字:youtube 视频 id 正则表达式 格式 数组 Javascript      更新时间:2023-09-26

提前道歉,因为我知道这个问题有很多答案,但是我没有成功地实现任何给定的答案。话虽如此,我们还是切入正题吧。

我有一个表,其中包含用户输入youtube视频id的文本输入
在提交时,我的javascript将创建一个包含这些youtube视频id的数组
如果用户输入一个youtube url,数组将中断

快速解决
如果有人可以帮助我得到正则表达式验证工作,所以用户将被正确提醒,并纠正他们的输入,这将是一个很好的开始

理想溶液
我不喜欢提醒用户,让他们改变他们输入的东西,因为它的糟糕的用户体验,所以如果有人觉得今天特别有帮助,可以告诉我如何采取他们输入的东西,剥离url位,只推youtube视频id到数组,这将是超级美妙的:)

示例:如果用户输入

["https://www.youtube.com/watch?v=K1CScQOj1dA", "https://youtu.be/wIJ1sFrgMds", "IISzG-sPUuo"]
代码将格式化它们的输入,最终的userSongs数组将是:
["K1CScQOj1dA", "wIJ1sFrgMds", "IISzG-sPUuo"]



这是我的小提琴http://jsfiddle.net/1qLr9n2j/
正如您所看到的,当两个输入是无效条目

时,警报显示不匹配

您可以使用以下方式进行匹配:

.*?(['w-]+)$

$1代替

看到演示

JS代码:

var rx = /.*?(['w-]+)$/;
for (var i = 0; i < userSongs.length; i++) {
        userSongs[i] = userSongs[i].replace(rx, '$1');
}
alert(userSongs);

这是我对理想解的破解

var re = new RegExp("youtu(?:'.be|be'.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)");
$('.song-input').each(function () {
    var val = $(this).val()
    if (val) {
        var matches = val.match(re);
        $(this).val(matches[1]);
    }
});

我从James Poulson对你链接到的问题的回答中获取了正则表达式。