javascript - 检查字符串是否包含链接 javascript
问题描述
我正在尝试检查字符串是否包含链接。如果它确实包含链接,则返回带有视频或 gif id 的 html 标记。
我让它与 youtube 一起使用,但我无法让它与 giphy 一起使用,希望有人能帮助我。
function checkLinks(string) {
let youtubeId = (string.match(/youtube\.com\/watch\?.*?v=([^&]+)/i) || [])[1];
if (youtubeId)
return '<div class="videoDiv"><iframe width="500" height="281.25" src="https://www.youtube.com/embed/' + youtubeId + '" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>';
let gifID = (string.match(/media4\.giphy\/.com\/media\?.*([^&]+)/i) || [])[1];
if (gifID)
return '<div class="gifDiv"><a href="https://media4.giphy.com/media/' + gifID + '/giphy.gif" class="fancybox"><img class="chat_image" src="https://media4.giphy.com/media/'+ gifID + '/100.gif"></a></div>'
return '';
}
const checkGif = checkLinks('https://media4.giphy.com/media/jQyHHXQ60W93O/giphy.gif');
const checkYoutube = checkLinks('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
console.log('check gif', checkGif);
console.log('check youtube', checkYoutube);
解决方案
这是不那么复杂的事情
function checkLinks(string) {
const url = new URL(string), hostname = url.hostname;
if (hostname.includes("youtube")) {
const youtubeId = url.searchParams.get("v")
return '<div class="videoDiv"><iframe width="500" height="281.25" src="https://www.youtube.com/embed/' + youtubeId + '" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>';
} else if (hostname.includes("giphy")) {
const gifID = url.pathname.split("\/")[2];
return '<div class="gifDiv"><a href="https://media4.giphy.com/media/' + gifID + '/giphy.gif" class="fancybox"><img class="chat_image" src="https://media4.giphy.com/media/' + gifID + '/100.gif"></a></div>'
}
return '';
}
const checkGif = checkLinks('https://media4.giphy.com/media/jQyHHXQ60W93O/giphy.gif');
const checkYoutube = checkLinks('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
console.log('check gif', checkGif);
console.log('check youtube', checkYoutube)
推荐阅读
- django - 邮件功能不在 Django 中发送邮件
- c++ - 如何从 unordered_set 中获取单个项目?
- jquery - jQuery Ajax 验证不返回错误
- r - 仅更改部分线条的颜色
- c++ - `A a = A()` 有效吗?下面调用了哪些操作符/方法?
- ruby-on-rails - 当我打开上传的文件表单进行编辑时,文件名无法显示
- java - 采用类和同一类的实例的方法,否则编译时错误
- sql - 将相同长度的数组记录相加到新数组中
- ios - 尽管之前已获取过从 firebase 获取的数据,但有时不会将其添加到单元格中
- java - PhantomJs GhostDriver 不允许我点击提交(授予 Box 访问权限)与 chromewebdriver 一起使用