You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Reactjs中如何实现短URL自动转换为对应完整长URL的功能

React 实现 Stack Overflow 短链接转带缩略 slug 链接方案

核心逻辑

该功能的实现分为两步:首先从原始链接中提取问题ID,之后获取对应问题的标题生成缩略slug,拼接后即为转换后的链接。

具体实现代码

1. 提取问题ID工具方法

用正则匹配从输入的链接中提取纯数字的问题ID:

const getQuestionId = (url) => {
  const matchRes = url.match(/stackoverflow\.com\/questions\/(\d+)/);
  return matchRes ? matchRes[1] : null;
};

2. 完整 React 组件实现

import { useState, useEffect } from 'react';

const StackLinkTransform = ({ rawUrl }) => {
  const [displayUrl, setDisplayUrl] = useState(rawUrl);

  useEffect(() => {
    const qid = getQuestionId(rawUrl);
    // 未匹配到有效ID直接返回原始链接
    if (!qid) return;

    // 调用公开接口获取问题标题,无密钥也有基础调用额度
    fetch(`https://api.stackexchange.com/2.3/questions/${qid}?order=desc&sort=activity&site=stackoverflow`)
      .then(res => res.json())
      .then(apiRes => {
        if (!apiRes.items?.length) return;
        const rawTitle = apiRes.items[0].title;
        // 生成规范slug:转小写、替换特殊字符为横杠、截断加省略号
        const shortSlug = rawTitle
          .toLowerCase()
          .replace(/[^a-z0-9]+/g, '-')
          .replace(/(^-|-$)/g, '')
          .slice(0, 50);
        // 拼接最终展示的链接
        setDisplayUrl(`https://stackoverflow.com/questions/${qid}/${shortSlug}...`);
      })
      .catch(() => {
        // 接口调用失败时保留原始链接,不影响正常使用
        setDisplayUrl(rawUrl);
      });
  }, [rawUrl]);

  // 可根据需求自定义展示形式,此处直接返回转换后的链接文本
  return <span>{displayUrl}</span>;
};

export default StackLinkTransform;

简化方案

如果不需要展示真实的问题slug,可省略接口调用步骤:因为直接访问仅带ID的Stack Overflow链接,平台会自动重定向到带完整slug的页面,展示时直接在原始链接后拼接...即可,无需额外请求。

内容的提问来源于stack exchange,提问作者Nguyễn Tuấn Kiệt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 00:21:03