1

我想在 sublime text 2 中使用正则表达式替换链接文本

我的链接看起来像这样

<a href="#" class="link link1">This is a text for link 1</a>
<a href="#" class="link link2">This is a text for link 2</a>
<a href="#" class="link link3">This is a text for link 3</a>

我的页面中有 100 多个链接。

我试过这样的正则表达式。

<a href="#" class="link.+">.+</a>

它有效但它也匹配标签。

谁能告诉我如何只匹配这个文本This is a text for link *

4

3 回答 3

3

不过,我不知道您为什么只想匹配文本。我几乎想不出任何可能需要这样做的用例。通常捕获组对于大多数替换场景就足够了。

如果标签中的文本没有任何模式,并且标签可以包含任意 classes,那么NO,这是不可能的。SublimeText 似乎使用了 Boost 库,它不支持可变长度后视。

如果标签是一致的(直到空格的所有内容都相同),除了class属性中的链接号,那么在一定程度上可能:

(?<=<a href="#" class="link link\d">).+?(?=</a>)

如果 number 类后面的链接有 2 位数字,则需要在相应的后视中添加:

(?:(?<=<a href="#" class="link link\d">)|(?<=<a href="#" class="link link\d\d">)).+?(?=</a>)

\d{1,2}不会在后视中工作。长度不是无限多的,但正则表达式引擎不支持它。)

工作截图

于 2013-02-11T14:15:30.960 回答
1

正如 nhahtdh 在他的回答中所暗示的那样,您可以在不使用后视或前瞻的情况下进行替换,使用此正则表达式进行替换:

搜索正则表达式:

(<a href="#" class="link.+?">)[^<]+(\d)(</a>)

替换字符串:

\1Link number \2 has been replaced\3

那将取代这个:

<a href="#" class="link link1">这是链接 1 的文本</a>
<a href="#" class="link link2">这是链接 2 的文本</a>
<a href="#" class="link link3">这是链接 3 的文本</a>

进入这个:

<a href="#" class="link link1">链接号 1 已被替换</a>
<a href="#" class="link link2">链接号 2 已被替换</a>
<a href="#" class="link link3">链接号 3 已被替换</a>

我上面给出的例子也表明可以在锚文本匹配中有捕获组,如果你不想要它,你可以删除它,并相应地更改捕获组号。

于 2014-01-17T03:08:43.030 回答
0

用于匹配这是一个链接文本,后跟一个空格,后跟一个数字,使用This is a text for link \d+.

编辑:要匹配链接的开始和结束标记对之间的任何文本,请使用捕获组,例如:

<a href="#" class="link.+?">(.+)</a>

$1匹配标签之间的文本。

于 2013-02-11T14:04:15.243 回答