React JS 从文本中检测链接这是我的 [web](https://www.google.com/)

Posted

技术标签:

【中文标题】React JS 从文本中检测链接这是我的 [web](https://www.google.com/)【英文标题】:React JS Detect link from text this is my [web](https://www.google.com/) 【发布时间】:2022-01-06 22:47:23 【问题描述】:

有没有人建议从文本中检测链接 目前在反应我只是使用下面的代码检查正则表达式的链接:

 urlify(text) 
  var urlRegex = (new RegExp("([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]2,4)(:[0-9]+)?(/.*)?"));
   return text.replace(urlRegex, function (url) 
   return '<a href="' + url + '" target="_blank">' + url + '</a>';
 );

  render() 
   let description="this is my [web](http://***.com), this is [Google](https://www.google.com/)"
    return (
    <p dangerouslySetInnerhtml=__html: this.urlify(description)></p>
   );

上述代码的输出显示为here

但我只想将文本显示为 这是我的web

【问题讨论】:

为什么那个字符串最后多了一个]?这只是一个错字吗? 抱歉,已更新 【参考方案1】:

如果您想继续使用dangerouslySetInnerHTML,您可以使用此匹配/替换来创建锚点...

const text = 'this is my [web](https://www.google.com/)'

const regex = /(.+)\[(.+)\]\((.+)\)/;

const anchor = text.replace(regex, (match, a, b, c) => 
  const text = `$a[0].toUpperCase()$a.substring(1)$b`;
  return `<a href="$c">$text</a>`;
);

console.log(anchor);

...或者您可以创建一个定制组件,将匹配的数组输出映射到某个创建锚点的 JSX。

function MarkdownAnchor( markdown ) 

  const regex = /(.+)\[(.+)\]\((.+)\)/;
  const match = markdown.match(regex);

  function formatText(str) 
    return `$str[0].toUpperCase()$str.substring(1)`
  

  return (
    <a href=match[3]>
      formatText(`$match[1]$match[2]`)
    </a>
  );



const markdown = 'this is my [web](https://www.google.com/)';

ReactDOM.render(
  <MarkdownAnchor markdown=markdown />,
  document.getElementById('react')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="react"></div>

【讨论】:

以上是关于React JS 从文本中检测链接这是我的 [web](https://www.google.com/)的主要内容,如果未能解决你的问题,请参考以下文章

从 HTML、CSS、JS 转换为 JSX、CSS、JS 时,如何在 react 中链接我的 javascript 文件?

通过Android WebView中的javascript检测点击HTML按钮

在设备上使用 react-native-firebase 检测文本要求计费

如何根据 REACT JS 中的文本输入从 API 搜索 [重复]

React:检测并包装自定义元素中的链接

在 React JS 中:如何使用 MUI 中的“复制全部”图标从网格中复制所有文本