2013-01-14 82 views
2

我有一個var baseURL,我所知道的是:baseURL = c:\whatever\mybasedir\
我有一個HTML源代碼可能包含此:正則表達式替換IMG SRC屬性

<IMG alt="foo" src="file://c:\whatever\mybasedir\root\foo\bla.gif"> 
or/and: 
<IMG alt="foo" src="file://c:/whatever/mybasedir/root/foo/bla.gif"> 
or/and: 
<IMG src="c:\whatever\mybasedir\root\foo\bla.gif"> 
or/and: 
<IMG src="c:\whatever\mybasedir/root/foo/bla.gif"> 

我需要替換所有的SRC標籤,這樣的結果路徑風格相對Unix向baseURL

<IMG src="root/foo/bla.gif"> 

,或者如果有一個alt屬性(或其它屬性的順序可以變化。):

<IMG alt="foo" src="root/foo/bla.gif"> 

我該如何匹配<IMG * src="*" *>? 任何想法RegEx(或其他方法)可以在這裏幫助嗎?

(我不能使用DOM做好這項工作,因爲IE8/9 DOM被擺在首位造成這種局面 - 自動添加<base href>到所有相對SRC標籤)

+2

總是值得諮詢@bobince:HTTP://計算器。 com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454 –

+0

@DavidHeffernan,這很有趣:D如何在HTML上使用XML解析器? (而不是XHTML) – ZigiZ

+0

那麼,你需要一個HTML解析器來完成這項工作。當然,正則表達式可以做你需要的。順便說一句,今天我碰巧穿着我的Stack Overflow T恤,裏面包含了bobince着名答案的文字。 –

回答

4

你可以做

正則表達式:(<IMG[^>]*)src="[^"]*c:.whatever.mybasedir.

替換:$1src="

+2

我總是驚訝RegEx人能構造出多麼複雜的模式+1 –

+0

我仍然需要將'root \ foo \ bla.gif'替換爲'root/foo/bla.gif'我怎樣才能匹配' C:.whatever.mybasedir.'? – ZigiZ

+1

我已將您的RE更改爲'( *)src =「[^」] * c:.whatever.mybasedir。(。*?「)',並在$ 2'上使用回調替換」\「 – ZigiZ

3

更換(<IMG.*src=")(.*[/\\])(root[/\\].*?".*>)

$1$3

編輯

希望這將工作

在這樣的時刻更換(<IMG.*src=")(.*[/\\]mybasedir[/\\])(root)(([/\\][^/\\]+)*)(".*>)

$1$3$4$6

+1

我總是驚訝RegEx人能構造出多麼複雜的圖案+1 –

+0

它幾乎可行!但結果是(對於第一個和第三個IMG):'src =「root \ foo \ bla.gif 「'(反斜槓),我需要'root/foo/bla.gif」(斜槓) – ZigiZ

+0

如果路徑已經包含'root',任務就會失敗eg 'c:\ whatever \ root \ mybasedir \ root \ foo \ bla.gif' – ZigiZ