js 格式化 md 和 html 字符串的 链接

20 阅读1分钟

将 md 和 html 字符串中是链接的转成可点击链接。

// md
function convertUrlsInMarkdown(input) {
    const placeholder = 'UNIQUE_PLACEHOLDER_' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
    let protectedLinks = [];
    const markdownLinkPattern = /\[([^\[\]]*)\]\((https?:\/\/[^\s)]+)\)/g;
    let processedString = input.replace(markdownLinkPattern, (match) => {
        protectedLinks.push({ placeholder, original: match });
        return placeholder;
    });
    const urlPattern = /(https?:\/\/[^\s<"]+)/g;
    processedString = processedString.replace(urlPattern, (url) => {
        const hostname = new URL(url).hostname;
        return `[${hostname}](${url})`;
    });
    protectedLinks.forEach(item => {
        processedString = processedString.replace(item.placeholder, item.original);
    });

    return processedString;
}

// html
export const convertTextLinksToAnchors = (htmlString) => {
  const urlPattern = /(?<!<a[^>]*>)(https?:\/\/[^\s<]+)(?![^<]*<\/a>)/gi;
  return htmlString.replace(urlPattern, function (match) {
    const url = match;
    const linkText = new URL(url).hostname;
    return `<a href='${url}' target="_blank" >${linkText}</a>`;
  });
}