在javascript中替换多个字符串实例

时间:2013-06-24 08:35:47

标签: 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替换多个实例,如上面的字符串为url中的3个实例。但它只替换第一个实例,而“abcd.gif”替换为“http://xyz.com/800002418/abcd.gif”。休息就是这样。

2 个答案:

答案 0 :(得分:1)

我怀疑你在这里尝试做的事情如下:

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

答案 1 :(得分:0)

请参阅@ Phylogenesis的答案,了解如何做您认为自己想做的事情,但这是您真正想做的事情吗?修改完字符串后,你打算用它做什么?我想也许你会把它设置为某个元素上的字符串CSS值,就像在elt.cssText=中一样。但是为什么你认为连续三个background属性会做什么有用的?每一个都将覆盖前一个。

退一步,而不是尝试使用regexp将CSS声明作为字符串进行操作,我建议操作单个属性值。所以,像

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

但我仍然对你为什么要这样做感到困惑。我想这是因为远程URL只在运行时才知道?最灵活的解决方案是将CSS文件放在有问题的主机上并加载它。如果图像在那里,你应该能够安排将CSS文件与它们一起放在那里。然后,background属性值中的URL引用将根据CSS文件的URL自动解释,而不必以这种丑陋的方式重写。

相关问题