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

Posted

技术标签:

【中文标题】如何替换具有无限字符子串的字符串?【英文标题】:How to Replace String having Substring of Unlimited Characters? 【发布时间】:2012-10-05 11:29:03 【问题描述】:

我正在尝试替换字符串

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");

Regexp [\w\d]* 表示任意数量的字母或数字。如果您允许 url 中的任何字符,请执行以下操作:

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

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

当您编写"/btn_close_.*\.gif/" 正则表达式时,这意味着您的字符串应包含“btn_close”字符串+任意数量的任意字符+“.gif”字符串。

【讨论】:

这可以完成工作。你能解释一下你为什么这样做吗?我知道我忘了在 gif 部分转义点。但是你为什么要.*?为什么* 本身不够用?【参考方案2】:

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

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

它所做的只是找到最后一个斜杠并删除所有后续字符,因此您可以轻松附加文件名。

【讨论】:

其实是有的。我没有包括所讨论的字符串是更大字符串的一部分这一事实。

以上是关于如何替换具有无限字符子串的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

用C语言实现 原字符串中指定的子串的的查找与替换代码?注:一定要有用户自己输入指定子串的那个过程!

数据结构(十五)串的顺序存储结构(顺序串)

python如何在给定的字符串中,统计某个特定子串的数量?

PB中取字符串子串的函数是啥

Office 365 函数之Replace 函数的使用

PB中取字符串子串的函数是啥