Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何替换具有无限字符子字符串的字符串?_Javascript_Regex_Replace - Fatal编程技术网

Javascript 如何替换具有无限字符子字符串的字符串?

Javascript 如何替换具有无限字符子字符串的字符串?,javascript,regex,replace,Javascript,Regex,Replace,我想换一根绳子 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\u close\u pink.gif或btn\u close\u someOtherFancyCol

我想换一根绳子

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\u close\u pink.gif
btn\u close\u someOtherFancyColor.gif
都被替换为
btn\u close\u black.gif

我尝试过这个,但失败了,我不知道为什么:

var newUrl = url.replace(/btn_close_*.gif/g,"btn_close_black.gif"); // this fails
我做错了什么?

试试这个:

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");
Regexp
[\w\d]*
表示任意数量的字母或数字。如果允许url中包含任何字符,请执行以下操作:

var newUrl = url.replace(/btn_close_.*\.gif/g,"btn_close_black.gif");
编辑:当您写入
“/btn\u close\\.gif/”
regexp时,这意味着您的字符串应包含“btn\u close”字符串+任意数量的“\u”字符+“.gif”字符串


当您编写
“/btn\u close.*\.gif/”
regexp时,这意味着您的字符串应该包含“btn\u close”字符串+任意数量的字符+“.gif”字符串。

当您可以简单地连接字符串时,是否有理由使用相当繁琐的替换操作?如果没有,我建议:

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

它所做的只是找到最后一个斜杠并删除下面的所有字符,这样您就可以轻松地附加文件名。

事实上,确实存在。我没有包括这个事实,即所讨论的字符串是一个更大字符串的一部分。这就完成了工作。你能解释一下你为什么这么做吗?我知道我忘了在gif部分漏掉圆点。但是为什么你必须
*
?为什么
*
本身不够?