-1

字符串内容:

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 ”。安息如故。

4

2 回答 2

1

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

originalcode = originalcode.replace(/url\(([^\)]*)\)/g, "url(http://xyz.com/800002418/$1)");
于 2013-06-24T13:16:32.380 回答
0

请参阅@Phylogenesis 的答案,了解如何做您似乎认为自己想做的事情,但那是您真正想做的事情吗?在你修改了字符串之后,你打算用它做什么?我想您可能会将其设置为某个元素上的字符串 CSS 值,例如elt.cssText=. 但是为什么你认为连续三个background属性会做任何有用的事情呢?每一个都会覆盖前一个。

退后一步,而不是尝试使用正则表达式将 CSS 声明作为字符串来操作,我建议操作单个属性值。所以,像

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

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

于 2013-06-24T14:08:01.203 回答