2015-01-09 45 views
0

我想要做的是更新HTML背景標籤在文檔中的URL。警告只是本地URL應該更新,所以任何開始http應該被忽略。RegEx更新背景= URLs

正在嘗試實現的RegEx需要替換文件名爲&擴展名前的路徑。因此,例如:

background="image.gif" 
background="/image.gif" 
background="images/image.gif" 
background="images/directory/image.gif" 

應該作爲所有輸出:

background="/mydirectory/image.gif" 

與往常一樣,可能已經在輸入文件中使用的單引號或雙引號。

我已經有一個現有的RegEx爲CSS圖像引用做了一個非常類似的工作。正則表達式是:

url\((?:\'|\"")?(?!(?:http|ftp))(?<path>.+)\/(?<filename>.*?)\1?\) 

我想,我只想能夠更換URL()匹配的背景=但到目前爲止,我還沒有成功。

任何幫助極大apprechiated。

回答

0

See demo here 正則表達式background=['"](?!\s*(http|ftp):\/\/)(?:[^'"]*\/)*(?<filename>[^'"]+)['"]

在細節:

  • baground=匹配的背景='literraly
  • ['"]匹配任何報價
  • (?!\s*(http|ftp):\/\/)確保有沒有HTTP報價後://或ftp://(甚至在之前有空格)
  • (?:[^'"]*\/)*匹配的路徑,直到當仍然包含在其中(?:)可以通過*重複0或更多的時間非捕獲組引號[^'"]*\/裏面的文件名(可以通過?被替換,因爲它會匹配其實全有或全無)
  • (?<filename>[^'"]+)捕獲什麼也沒報價(非空的+量詞)在捕獲組文件名
  • ['"]比賽的最後報價,以避免捕獲它

老回答(如果它的一些重要): See demo here

的正則表達式是:background=['"](?!\s*(http|ftp):\/\/)\/?(?<filename>[^'"]*)['"]

在細節:

  • baground=匹配的背景='literraly
  • ['"]匹配任何報價
  • (?!\s*(http|ftp):\/\/)確保引號之後有沒有HTTP:/ /或ftp://(即使是之前有空格)
  • \/?比賽領先/避免捕獲它,如果存在
  • (?<filename>[^'"]*)捕獲任何東西不是在捕獲組文件名的報價
  • ['"]比賽的最後報價,以避免捕獲它

觀看演示更換,但這個想法是取代/mydir/${filename}

+0

謝謝@Tensibai,這幾乎完美!唯一的問題是,我需要刪除源文件名之前的所有內容,例如,在輸入'/images/directory/image.gif'時輸出爲'/mydir/images/directory/image.gif'時只輸出'/mydir/image.gif'。我希望這是有道理的?! – MowerDance

+0

好吧,抱歉誤會了您的需求,我會更新 – Tensibai

+0

@MowerDance回答更新 – Tensibai