2009-08-19 43 views
6

在JavaScript中,我有一個包含DOM片段的字符串。我如何找到並替換圖像的src屬性?JavaScript中的正則表達式 - 替換Image src屬性

我想用新路徑替換所有圖像的路徑,但保留圖像名稱。並非所有路徑都是相同的,可能來自不同的地點。 我的正則表達能力最差。

例如:

Change 

    <img src='path/to/image/name.jpg' /> 

into 

    <img src='newPath/name.jpg' /> 

回答

7

試試這個:

str.replace(/src='(?:[^'\/]*\/)*([^']+)'/g, "src='newPath/$1'"); 
+0

似乎沒有工作。將'http://blog.internetnews.com/skerner/smk/testpilot.png'更改爲 'http://newpath/blog.internetnews.com/skerner/smk/testpilot.png' – redsquare 2009-08-19 08:50:12

+0

它會這樣做。你需要使用「src ='newPath/$ 2'」作爲替換 – Xetius 2009-08-19 08:51:38

+0

優秀的,似乎是做的伎倆,歡呼Xetius – redsquare 2009-08-19 08:54:14

1
replace(/(.*)\/(.*)/, "newPath/$2"); 
+0

不能得到這個工作,它結束了「newPath />」 – redsquare 2009-08-19 08:48:04

+0

這很奇怪。當我在這裏嘗試它時它工作:http://www.regular-expressions.info/javascriptexample。html – Xetius 2009-08-19 08:56:18

+0

看到http://pastebin.me/95775a662ddb4f79da1f7beaa1d4749b – redsquare 2009-08-19 09:04:05

9

拿了秋葵的答案,並增加了一些事情,以改善它:

  • 如果輸入字符串包含東西除<img>以外的其他標籤可能有 a src屬性 - 這將不再與 匹配/替換它們。

  • src屬性可能是 使用單引號或雙引號。

  • 該測試不區分大小寫。

在所得:

string.replace(/<img([^>]*)\ssrc=(['"])(?:[^\2\/]*\/)*([^\2]+)\2/gi, "<img$1 src=$2newPath/$3$2"); 
+0

乾杯gnarf。 – redsquare 2009-08-21 08:34:24

1

如果以字符串形式使用原始(非DOM)數據,諸如HTML,上述不匹配雙引號字符。此代碼可能證明是有用的,太:

root  = serviceURL("file") + "&src=" + encodeURIComponent(root); 
// html itself 
html  = html.replace(/src=['"](?:[^"'\/]*\/)*([^'"]+)['"]/g, "src='" + root + "/$1'"); 
+0

更好的解決方案 – 2017-11-01 16:40:57

0

以上解決方案並不在我的情況很好地工作,我在那裏將它存儲在數據庫之前更換絕對路徑的所有相對路徑。但這是我的解決方案,以防別人爲別人工作。乾杯。

replace(/<img([^>]*)\ssrc=(['"])(\/[^\2*([^\2\s<]+)\2/gi, "<img$1 src=$2" + BaseURL + "$3$2"); 
0

我在項目中使用這些表達,工作就像魅力,處理所有的情況下,像,報價,雙引號,文本等多種圖像標記 在Javascript中

text.replace(/\<img([^>]*)\ssrc=('|")([^>]*)\2\s([^>]*)\/\>/gi, "<img$1 src=$2newPath/$3$2 $4/>"); 

在PHP

preg_replace('/\<img([^>]*)\ssrc=(\'|\")([^>]*)\2\s([^>]*)\/\>/', "<img$1 src=$2newPath/$3$2 $4/>",$text);