JavaScript用正则表达获取抖音分享链接中的视频地址

1.正则表达式匹配:基于正则表达式对文本中的 URL 进行匹配和提取。例如,使用以下正则表达式即可匹配出上述示例中的视频链接。

const reg = /((?:https?:\/\/)?[\w/\-?=%.]+\.(?:douyin|tiktok)\.com\S+)/i;
const matches = str.match(reg);
if (matches) {
  const url = matches[1];
  // 处理匹配到的 url
}

2.字符串切割:基于字符分隔和模式匹配对文本进行处理。例如,先将字符串按空格和换行符进行分割,再遍历每个分割后的字符,判断是否包含视频链接的主要特征。

const tokens = str.split(/[\s\n]/);
for (let i = 0; i < tokens.length; i++) {
  const token = tokens[i];
  if (token.includes('douyin.com') || token.includes('tiktok.com')) {
    const pos = token.indexOf('http');
    const url = pos >= 0 ? token.substr(pos) : '';
    // 处理匹配到的 url
  }
}

使用正则表达式匹配和字符串切割两种方法封装到 getUrl() 函数中的示例代码:

function getUrl(str) {
  // 使用正则表达式匹配
  const reg = /((?:https?:\/\/)?[\w/\-?=%.]+\.(?:douyin|tiktok)\.com\S+)/i;
  const matches = str.match(reg);
  if (matches) {
    return matches[1];
  }

  // 或者使用字符串分隔
  const tokens = str.split(/[\s\n]/);
  for (let i = 0; i < tokens.length; i++) {
    const token = tokens[i];
    if (token.includes('douyin.com') || token.includes('tiktok.com')) {
      const pos = token.indexOf('http');
      const url = pos >= 0 ? token.substr(pos) : '';
      return url;
    }
  }

  // 未能匹配到合法的URL,返回空值
  return null;
}

使用时,只需要调用该函数并传入需要处理的文本,即可得到匹配到的视频链接。例如:

const str = '这是一段包含抖音视频和网页链接的文本,https://www.douyin.com/video/xxx #抖音 视频 douyin.com tiktok.com';
const url = getUrl(str);
console.log(url); // 输出:https://www.douyin.com/video/xxx

算法优化

原算法可能无法正确解析一些 URL 链接,例如该示例中包含其他字符或标点符号的链接。如果需要更好的解析效果,可以通过以下方式尝试优化该算法:

  1. 考虑将正则表达式 reg 修改为更严格的匹配规则以避免错误的匹配。例如,只匹配以 http://https:// 开头的 URL 链接: /https?:\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g

  2. 在获取到匹配结果后,再进一步判断是否是有效的视频链接。例如,在上述语句中,可以考虑优先匹配包含 douyin.comtiktok.com 的链接,并排除掉其他非视频链接。可尝试使用如下代码进行优化:

function getUrl(str) {
  const reg = /(https?:\/\/[\w\-./:]+\.(?:douyin|tiktok)\.com\/\S+)/i; // 正则表达式匹配
  const matched = str.match(reg); // 获取匹配结果
  if (matched && matched.length > 0) { // 判断匹配结果是否存在并且不为空
    return matched[0]; // 返回第一个匹配结果
  }
  return null; // 未匹配到则返回空值
}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值