【问题标题】:Regular expression for anchor tag with all attributes具有所有属性的锚标记的正则表达式
【发布时间】:2022-02-12 09:43:44
【问题描述】:

我正在尝试获取一个正则表达式来替换文本字符串中的所有链接作为链接的值。

链接可能如下所示:

<a href="http://whatever" id="an_id" rel="a_rel">the link</a>
<a href="/absolute_url/whatever" id="an_id" rel="a_rel">the link</a>

我想要一个我得到的正则表达式:the link

【问题讨论】:

标签: regex expression


【解决方案1】:
/<a[^>]*>([^<]+)<\/a>/g

它远非完美,但您需要提供更多示例来说明什么是正确匹配,什么不是(例如,空格呢?)

【讨论】:

【解决方案2】:
/<a[\s]+([^>]+)>((?:.(?!\<\/a\>))*.)<\/a>/g

这将匹配任何&lt;a ...&gt;...&lt;/a&gt; 标记,包括正确匹配的包含

blah blah <a href="test.html">This line contains an HTML opening < bracket.</a> blah blah
blah blah <a href="test.html">This line contains <strong>bold</strong> text.</a> blah blah

将捕获:

<a href="test.html">This line contains an HTML opening < bracket.</a>
  • 使用捕获组:
    • href="test.html"
    • This line contains an HTML opening &lt; bracket.

<a href="test.html">This line contains <strong>bold</strong> text.</a>
  • 使用捕获组:
    • href="test.html"
    • This line contains &lt;strong&gt;bold&lt;/strong&gt; text.

它还包括为标签属性(如 class=""、href="" 等)捕获组并包含(标签之间的内容),如果您不需要它们,可以将其删除。

如果要跨多行捕获,请在末尾的“g”标志之前或之后添加“s”。请注意,“s”标志可能不适用于所有形式的正则表达式。

捕获示例(不使用“s”标志 - 正则表达式尚不支持):http://regexr.com/39rsv

【讨论】:

  • 你在结尾处有一个未转义的正斜杠
  • 你会如何修改它来覆盖bla bla &lt;a href="test.html" data-annoying="&gt;" &gt;yikes&lt;/a&gt;?那就是现在要杀死我的那个。
  • 问得好,@Jerry。我真的不知道如何回答你的问题(这篇文章已经晚了一年多),但我认为任何包含 XML 特殊字符的 HTML 属性都应该以某种方式对这些字符进行编码。
  • 转义 不应该出现的地方...正确的版本是 &lt;a[\s]+([^&gt;]+)&gt;((?:.(?!&lt;\/a&gt;))*.)&lt;\/a&gt;
【解决方案3】:

对已接受的答案稍作修正。这是正确的正则表达式:/&lt;a[^&gt;]*&gt;([^&lt;]+)&lt;\/a&gt;/g。用于关闭锚标记 &lt;/a&gt; 的正斜杠 (/) 未转义,因此不会进行匹配。

【讨论】:

    【解决方案4】:

    我无法获得此处列出的任何答案...不确定他们是否正确阅读了您的问题。

    我读你的帖子的方式你正在寻找&lt;a href="abcdefg"&gt;example tag&lt;/a&gt;的INBETWEEN

    (又名提取“示例标签”)

    但是我设法想出了这个解决方案。它似乎不适用于所有浏览器,但这是一个无赖(又名边缘,IE,没有尝试过 FF)

    此链接显示它有效 https://regexr.com/5dd0m

    (?<=<a.*>).+(?=<\/a>)
    

    【讨论】:

      【解决方案5】:

      我刚刚添加了明确命名的组

      <a.*href\s?=['"]*(?<href>[^'"]*)[^>]*>((?<text>(.(?!\<\/a\>))*.))<\/a>
      

      https://regex101.com/r/sbtcYr/1

      【讨论】:

        【解决方案6】:

        试试这个 100% 的工作

        (?i)&lt;a(.*)(")&gt;

        【讨论】:

          【解决方案7】:

          这样就够了

          <a.*?>(.*)?</a>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-16
            相关资源
            最近更新 更多