2013-02-11 48 views
1

我想更換使用正則表達式鏈接文本在崇高的文本2查找和批量編輯HTML元素在崇高的文本內容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 *

+0

你想匹配每對鏈接開始和結束標籤之間的任何文本? – 2013-02-11 14:08:13

+0

@NaveedS是的,我想匹配任何文字。 – Giri 2013-02-11 14:10:49

回答

3

我不知道你爲什麼只想匹配文本。我很難想到可能需要的任何用例。通常,捕獲組對大多數替換場景來說都是足夠的。

如果標籤內的文本沒有任何的圖案,標籤可以包含任意類,然後NO,它是不可能這樣做。 SublimeText似乎使用Boost庫,它不支持可變長度後視。如果後面的鏈接

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

如果標籤是一致的(一切下來的空間是相同的),除了在class屬性的鏈接數量,則有可能在一定程度上數類有2個數字,你需要在相應向後看補充:

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

\d{1,2}不會向後看的工作長度不窮個,但正則表達式引擎不支持它。)

Working screenshot

+0

嗨謝謝。但我得到這個錯誤。 '正則表達式中遇到的無效後向斷言' – Giri 2013-02-11 14:24:28

+0

@Giri:您的SublimeText版本是什麼? Mine是2.0.1 build 2217.查看截圖。 – nhahtdh 2013-02-11 14:27:12

+0

我也在使用相同的版本。其實我的班級看起來不像link1,link2等。我只是給出了演示名稱。但是我所有的鏈接類都沒有數字。所以我改變了你的代碼。 '(?<= ).+?(?=)'但我仍然遇到這個錯誤。 '在正則表達式中遇到無效的lookbehind斷言'是代碼或編輯器有問題? – Giri 2013-02-11 14:39:11

0

對於匹配這是一個文本鏈接後跟一個空格後跟一個數字,使用This is a text for link \d+

編輯:對於匹配的鏈接對開始和結束標記之間的任何文本,使用捕獲組,如:

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

$1文本中的標籤之間的匹配。

+0

我覺得'這是一個鏈接文本'只用於演示,而不是實際的文本。 – nhahtdh 2013-02-11 14:05:29

+0

@nhahtdh是的,你是對的。 – Giri 2013-02-11 14:09:05

+0

我想你還是沒有得到我要求的。我正在使用文本編輯器。我想改變所有錨鏈接文本。您提供的代碼選擇整個標籤。但我不想選擇整個標籤。只是錨文本 – Giri 2013-02-11 14:17:33

1

正如他的回答暗示的nhahtdh,你可以做更換,而無需使用向後看還是向前看,用這個正則表達式來進行替換:

搜索正則表達式:

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

替換字符串:

\1Link number \2 has been replaced\3 

竟被那d放回這樣的:

 
<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> 

成這樣:

 
<a href="#" class="link link1">Link number 1 has been replaced</a> 
<a href="#" class="link link2">Link number 2 has been replaced</a> 
<a href="#" class="link link3">Link number 3 has been replaced</a> 

我上面給的例子也表明,它可能具有的錨文本匹配捕獲組,如果你不想要它,你可以刪除它,並相應地更改捕獲組編號。