2013-06-24 36 views
-1

字符串內容替換:多個字符串實例在JavaScript

background:url(abcd.gif); background:url(images/header2.gif) no-repeat; 
background:url(images/bullet1.gif) no-repeat 11px 13px; 

JavaScript代碼:

var testRE = originalcode.match("url\(\(.*)\)"); 
testRE = testRE[2].replace('(',''); 
testRE = testRE.split(')')[0]; 
var img_path = "http://xyz.com/800002418/"+testRE; 
originalcode = originalcode.replace(testRE,img_path); 

在上面的代碼它只是更換匹配的第一個實例。我正在嘗試用字符串替換多個實例,就像上面的url中的3個實例一樣。但它只是替代第一個實例,那就是「abcd.gif」到「http://xyz.com/800002418/abcd.gif」。休息就是這樣。

+0

您是否試圖用完整路徑替換本地路徑images/something.png到http://bla.bla.com/something.png? – Stokedout

+0

是的,但css代碼被視爲單個字符串。 –

+0

查看'g'標誌。但是,真的,你想在這裏做什麼? – 2013-06-24 09:47:02

回答

1

我懷疑你實際上想在這裏做的是:

originalcode = originalcode.replace(/url\(([^\)]*)\)/g, "url(http://xyz.com/800002418/$1)"); 
+0

非常感謝男人,它很煩人。 –

+0

嘿,我想代替originalcode = originalcode.replace(/ url \(([^ \)] *)\)/ g,「url(/800002418/$ 1)」);如果我把「」替換爲「http://xyz.com/」,則代替「」。這意味着創建打開和關閉標籤。我怎麼能堅持「」輸出。 –

0

見@親緣關係的答案怎麼辦你似乎在想什麼,你想做的事情,但是,這是你真正想做?修改完字符串之後,您將如何處理它?我想也許你會把它設置爲某個元素的字符串CSS值,如elt.cssText=。但爲什麼你認爲連續的三個background屬性會做有用的事情?每一個都會覆蓋前一個。

退一步說,我不建議使用正則表達式來處理CSS聲明作爲字符串,而是建議操縱各個屬性值。所以,像

foo.style.backgroundImage=foo.style.backgroundImage 
    .replace(/\(.*)\)/,"http://..."+$1); 

但我仍然困惑,爲什麼你會想這樣做。我想這是因爲遠程URL只在運行時才知道?最靈活的解決方案是在有問題的主機上放置一個CSS文件並加載它。如果圖像在那裏,你應該能夠安排在那裏放置一個CSS文件。 background屬性值中的URL引用將自動根據CSS文件的URL進行解釋,而不必以這種醜陋的方式重寫。

相關問題