2012-10-15 111 views
0

我试图替换字符串如何替换具有无限字符子串的字符串?

var url = "www.fnord.com/foo/bar/btn_close_white.gif"; 

简单的一个字一个字一个字代替正常工作:

var newUrl = url.replace(/btn_close_white.gif/g,"btn_close_black.gif"); 

然而,因为我不知道是什么颜色的当前设置不,我需要的正则表达式忽略颜色部分并替换整个段。所以理论上,btn_close_pink.gifbtn_close_someOtherFancyColor.gif全部被替换为btn_close_black.gif

我尝试这样做,但它失败,我不知道为什么:

var newUrl = url.replace(/btn_close_*.gif/g,"btn_close_black.gif"); // this fails 

我在做什么错?

回答

1

试试这个:

var url = "www.fnord.com/foo/bar/btn_close_white.gif"; 
var newUrl = url.replace(/btn_close_[\w\d]*\.gif/g,"btn_close_black.gif"); 

正则表达式[\w\d]*指的字母或数字的任何量。如果允许URL任何字符做到这一点:

var newUrl = url.replace(/btn_close_.*\.gif/g,"btn_close_black.gif"); 

编辑:当你的写"/btn_close_*\.gif/"正则表达式,这意味着你的字符串应该包含“btn_close”字符串+“_”字符+的符“.gif”字符串的任何量。

当你写"/btn_close_.*\.gif/" regexp这意味着你的字符串应该包含“btn_close”字符串+任何数量的任何字符+“.gif”字符串。

+1

'\ w'已经包含'\ d' – Toto

+0

这样就完成了工作。你能解释一下你为什么这么做吗?我明白,我忘了逃避gif部分的点。但为什么你必须''*'?为什么'*'本身不够? – k0pernikus

+1

查看更新后的帖子。 –

0

当您可以简单地串接字符串时,是否有使用相当麻烦的替换操作的原因?如果不是这样,我的建议是:

var url = "www.fnord.com/foo/bar/btn_close_white.gif"; 
var newUrl = url.substring(url.lastIndexOf('/')+1,-1)+"btn_close_black.gif" 

它所做的就是找到一个删除所有以下字符的最后一个斜线,这样你就可以轻松地添加你的文件名。

+0

其实有。我没有包括这个事实,即有问题的字符串是一个更大的字符串的一部分。 – k0pernikus