在末尾查找、复制和插入的正则表达式

Regular expression to find, copy and insert at end

我在 HTML 中有一个很大的 TOC 作为无序列表。列表中的每个锚标记都有自己单独的 id 属性。可能使用 Dreamweaver 或 notepad++ 我希望能够找到 id 属性,将其复制并将其放置在 href 属性中设置的散列 (.html#) 之后,这样长 TOC 将滚动到中的位置它导航到的页面。

所以对于下面的例子:

<li><a id="a4.9" href="trigger_marker.html#">Trigger marker</a> </li>
<li><a id="a4.10" href="timedelayarrow.html#">Time-delay arrow</a> </li>
<li><a id="a4.11" href="spectrumview.html#">Spectrum view</a> </li>

我希望结果是:

<li><a id="a4.9" href="trigger_marker.html#a4.9">Trigger marker</a> </li>
<li><a id="a4.10" href="timedelayarrow.html#a4.10">Time-delay arrow</a> </li>
<li><a id="a4.11" href="spectrumview.html#a4.11">Spectrum view</a> </li>

一如既往地非常感谢您的帮助,对于我在这方面缺乏尝试表示歉意,但正则表达式是我怀疑我可能能够实现这一目标的唯一方法,而且我对正则表达式几乎没有经验知识。

试试这个正则表达式:

(?<=id=")([^"\n]+)"[^#\n]+#\K

Click for Demo

解释:

  • (?<=id=") - 正后视搜索前面有 id="
  • 的位置
  • ([^"\n]+) - 匹配出现 1 次以上既不是 " 也不是换行符的任何字符,并将其捕获到组
  • " - 按字面意思匹配 "
  • [^#\n]+ - 匹配出现 1 次以上既不是 # 也不是换行符
  • 的任何字符
  • # - 按字面意思匹配 #
  • \K - 忘记到目前为止匹配的所有内容。在这里,我们得到了我们必须插入在第 1 组中捕获的内容的位置。

替换后,