【问题标题】:Regex make labeled hyperlink正则表达式制作标记的超链接
【发布时间】:2023-03-07 18:51:02
【问题描述】:

我正在尝试从“[something](link)”创建一个带标签的超链接。

我怎样才能将字符串转换成这样的东西:something,它在论坛中的处理方式?

这是我尝试过的,但我不太了解正则表达式:

$(function() {

  var editor = $('.editor');

  $('.output').html(
    // editor.html().replace(/\[(.*)\)/g, '<a href="'+$1.replace(/\((.*)\)/g)+'">$1</a>')
    editor.html().replace(/\[(.*)\)/g, '<a href="">$1</a>')
  );

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div contenteditable class="editor">
  [something](link)
</div>
<div class="output">

</div>

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    您可以使用/\[(.+)\]\((.+)\)/g,然后使用$1获取链接的文本,使用$2获取链接的href属性:

    $n 其中n 是捕获组在正则表达式中的位置(一个数字):第一个捕获组是$1,第二个是$2,依此类推。

    $(() => {
      const editor = $('.editor');
      $('.output').html(editor.html().replace(/\[([^\[]+)\]\((.+)\)/g, '<a href="$2">$1</a>'));
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div contenteditable class="editor">
      [a link](https://example.com)
    </div>
    <div class="output"></div>

    【讨论】:

    • 那么$ 代表的是“在这些字符之间”?
    • @Souleste 回答已编辑:$n 其中 n 是正则表达式中的捕获组位置....
    • 我对此有疑问,说我有这个:[something] [something](link),第一个捕获组捕获第一个括号和最后一个括号之间的所有内容。我该如何解决?
    • @Souleste 查看更新的答案,使用了/\[([^\[]+)\]\((.+)\)/ 所以[something] [something](link) 产生[something] &lt;a href="link"&gt;something&lt;/a&gt;(第一个[something] 被忽略,因为它不尊重模式)。
    【解决方案2】:

    解决方案

    这个正则表达式应该做你想做的。

    /\[(.*?)\]\((.*?)\)/g

    此正则表达式还处理输入字符串,如 [something] [something](link)

    \[([^\[]*?)\]\((.*?)\)

    说明

    此正则表达式将方括号内的所有内容匹配到捕获组 1,直接后跟一个弯曲括号对,其内容进入捕获组 2。捕获组由一个弯曲括号对定义。之后可以使用 $1 和 $2 访问这些捕获组。

    覆盖输入字符串[something] [something](link) 的正则表达式不匹配括号对中的所有内容,而是匹配除左括号之外的所有内容。

    示例

    这是您发布的更新后的 sn-p。

    $(function() {
    
      var editor = $('.editor');
    
      $('.output').html(
        editor.html().replace(/\[(.*?)\]\((.*?)\)/g, '<a href="$2">$1</a>')
      );
    
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div contenteditable class="editor">
      [something](link)
    </div>
    <div class="output">
    
    </div>

    【讨论】:

    • 我没有意识到您可以在替换中放置多个搜索。你能向我解释一下$ 是如何与正则表达式一起工作的吗?
    • 我对此有疑问,说我有这个:[something] [something](link),第一个捕获组捕获第一个括号和最后一个括号之间的所有内容。我该如何解决?
    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2014-08-30
    相关资源
    最近更新 更多