2012-03-30 39 views
0

取代定表達式的每場比賽我有一個字符串contaning一些HTML標記,像這樣:JavaScript的正則表達式 - 用不同的字符串

var html = "<div> 
    <img src="http://test.com/image1.png" /> 
    <h1>SOME TEXT</h1> 
    <img src="http://text.com/image2.jpg" /> 
</div>"; 

我想更換內部src="..."

所有URL這是確定的,如果我做html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, "SOME_URL");
那麼所有src="..."成爲src="SOME_URL"

但現在我想替換每個匹配不同的字符串,從拍攝n陣列,但我遇到了麻煩。
我想我必須使用一個函數進行替換,但不知道如何實現它。
喜歡的東西:
html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, function ($0, $1){ //what do i do here??? });

所以,如果我有:

var arr = []; 
arr['http://test.com/image1.jpg']='file1'; 
arr['http://test.com/test.jpg']='file3'; 

從上面的HTML字符串將成爲:

"<div> 
    <img src="file1" /> 
    <h1>SOME TEXT</h1> 
    <img src="http://text.com/image2.jpg" /> 
</div>" 

注意「http://text.com /image2.jpg'不是數組的關鍵字,所以它不會被替換。

任何幫助表示感謝,提前。

回答

1
var html = '<div><img src="http://test.com/image1.jpg" />...</div>'; 

var arr = { 
'http://test.com/image1.jpg' : 'file1', 
'http://test.com/test.jpg' : 'file3' 
} 

html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, function ($0, $1){ 
    return ' src="' + (arr[$1] || $1) + '"'; 
}); 

console.log(html)回報

"<div><img src="file1" /><h1>SOME TEXT</h1><img src="http://text.com/image2.jpg" /></div>" 
+0

完美!我想我應該在那裏分配一些東西(例如$ 0 = arr [$ 1];),應該想到返回......謝謝Fabrizio,救了我的一天! – CrisDeBlonde 2012-03-30 11:19:59

+0

很高興有用。 – fcalderan 2012-03-30 11:23:49

1

我關於正則表達式忘記在這種情況下,如果你有一個包含對象中的所有URL及其各自更換一個數組,爲什麼不這樣做:

for (i in replaceObj) 
{ 
    html = html.split(i).join(replaceObj[i]); 
} 

試圖在控制檯:

html = '<div><img src="imgs/img.jpg"/></div>'; 
replaceObj = {}; 
replaceObj['imgs/img.jpg'] = 'file'; 
for(i in test){html = html.split(i).join(replaceObj[i])}; 

輸出:<div><img src="file"/></div>。你可以拆分src="'+i'"'和concat。加入時一樣安全......但底線:保持簡單,只要你可以

+1

感謝Elias因爲我的問題而煩惱。有趣的方法,但我寧願不改變我的初始設計,只要這是可能的。再次感謝您的回覆;) – CrisDeBlonde 2012-03-30 12:10:49

+0

雖然我不知道你最初的設計,也不想冒風格或冒犯:我唯一遺漏的就是正則表達式,據我所知...我可以'幫助它,真的...只要我看到有人在我不會的情況下使用正則表達式,我必須作出反應...如果您喜歡,請將其稱爲OCD; - )...祝您的項目順利! – 2012-03-30 12:19:52

相關問題