带有正则表达式youtube视频ID的Javascript格式数组

时间:2015-06-02 19:25:53

标签: javascript jquery arrays regex youtube

事先道歉,因为我知道这个问题有many answers但是我没有成功实施任何给定的答案。话虽如此,让我们来解决这个问题。

我有一个包含文本输入的表格,用户可以在其中输入youtube视频ID
提交我的javascript将创建一个包含这些youtube视频ID的数组
如果用户输入了youtube网址,则数组会中断

快速解决方案
如果有人可以帮助我进行正则表达式验证,那么用户将得到正确的警报并纠正他们的输入,这将是一个良好的开端

理想解决方案
我不喜欢提醒用户并让他们改变他们输入的内容,因为它的用户体验不好,所以如果有人今天感觉更有帮助,可以告诉我如何拿走他们输入的内容并删除网址并仅推送youtube视频ID到数组,这将是非常精彩的:)

示例:如果用户输入了

["https://www.youtube.com/watch?v=K1CScQOj1dA", "https://youtu.be/wIJ1sFrgMds", "IISzG-sPUuo"]

代码会格式化他们的输入,最终的userSongs数组将是:

["K1CScQOj1dA", "wIJ1sFrgMds", "IISzG-sPUuo"]



这是我的小提琴http://jsfiddle.net/1qLr9n2j/
如您所见,当两个输入为无效条目时,警报显示不匹配

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容进行匹配:

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

并替换为$1

请参阅DEMO

JS代码:

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

答案 1 :(得分:1)

这是我对理想解决方案

的抨击
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]);
    }
});

我从詹姆斯·普尔森的answer那里拿出正则表达式来解决你所链接的问题。