我正在使用JavaScript&正则表达式围绕链接构建对象。需要澄清

时间:2017-07-17 01:09:34

标签: javascript jquery html regex youtube

澄清 - 我已经建立了一个评论系统来清理所有HTML并将其显示为纯文本以防止拖钓,跨站点脚本等。

最重要的是,我在页面加载后运行javascript,并检测到Youtube和Imgur内容的DIRECT链接,然后构建适当的播放器/框架/标签以显示该内容。

这是我的示例代码:

<div class="video imgur">
https://i.imgur.com/Ym7MypF.jpg

https://www.youtube.com/watch?v=t-ZRX8984sc
</div>

脚本:

$('.video').html(function(i, html) {
    return html.replace(/(?:https:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, '<iframe width="420" height="345" src="https://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>');
});

$('.imgur').html(function(i, html) {
    return html.replace(/(?:https:\/\/)?(?:i\.)?(?:imgur\.com|)\/(.+)/g, '<img src="https://i.imgur.com/$1">');

});

我可以让一个人在没有其他人的情况下工作 - 但是 - 在同一页面上同时运行会产生破碎的标签和这样的链接,具体取决于顺序:

<iframe width="420" height="345" src="https:&lt;img src=" https:="" i.imgur.com="" www.youtube.com="" embed="" t-zrx8984sc"="" frameborder="0" allowfullscreen=""></iframe>

为什么我的代码不能区分Imgur和Youtube并单独处理它们?我是Regex的新手,不知道我做错了什么。如果有人能把我解雇,我会很感激。

1 个答案:

答案 0 :(得分:2)

您的Imgur正则表达式匹配过多的网址,例如:

请尝试使用此正则表达式:/(?:https:\/\/)?(?:i\.)?(?:imgur\.com)\/(.+)/g