Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 使用for循环替换子字符串_Javascript - Fatal编程技术网

Javascript 使用for循环替换子字符串

Javascript 使用for循环替换子字符串,javascript,Javascript,我试图用“拒绝”一词替换子字符串。例如:如果原始字符串为“abcdefg”,而要替换的子字符串为“bcd”,则预期输出为“aDENIEDefg” 我不能使用.replace或其他任何东西,只能使用.substring 函数替换器(变量,替换){ 对于(设a=variable.length-1;a>=0;a--){ 对于(设b=replace.length-1;b>=0;b--){ 如果(替换[b]==变量[a]){ } } } } 我不知道下一步该做什么 下面是我的代码,用于从字符串中删除字符

我试图用“拒绝”一词替换子字符串。例如:如果原始字符串为“abcdefg”,而要替换的子字符串为“bcd”,则预期输出为“aDENIEDefg”

我不能使用
.replace
或其他任何东西,只能使用
.substring

函数替换器(变量,替换){
对于(设a=variable.length-1;a>=0;a--){
对于(设b=replace.length-1;b>=0;b--){
如果(替换[b]==变量[a]){
}
}
}
}
我不知道下一步该做什么

下面是我的代码,用于从字符串中删除字符

让stringToReturn=原始;
for(设a=toDelete.length-1;a>=0;a--){
对于(设b=original.length-1;b>=0;b--){
如果(原始[b]==删除[a]){
stringToReturn=stringToReturn.substring(0,b)+stringToReturn.substring(b+1,stringToReturn.length);
}否则{
继续;
}
}
}
警报(stringToReturn);
}

但是这次我不需要删除一个字符,而是找到一个子字符串来替换为拒绝。对于代码样式,我深表歉意。

如果您知道要替换的子字符串的长度,那么您可以迭代该字符串并检查此长度的所有可能的子字符串,因为您正在通过“窗口”查看:

函数替换(完整、部分、占位符){
对于(设i=0;i
const source=“abcdefg”;
const target=“bcd”;
const replacer=“已拒绝”;
常量替换=(源、目标、替换)=>{
const position=source.indexOf(目标);
如果(位置==-1)返回源;
让输出=源.substr(0,位置)
输出+=替换程序
输出+=源.substr(位置+目标.length);
返回输出
}
常量replaceAll=(源、目标、替换)=>{
让输出=源;
做{
输出=替换(输出、目标、替换)
}
while(输出!==替换(输出、目标、替换))
返回输出;
}
日志(replace(源、目标、replace))
当然,最容易理解、干净、优雅的最佳解决方案是:

constreplaceall=(源、目标、替换程序)=>{
返回source.split(target).join(replacer)
}

由于您没有指定是要执行完全替换还是单数替换,因此我对其进行了修改,以允许使用
布尔
参数,该
布尔
表示是执行单数替换还是完全替换

const replaceword=“拒绝”;
const testword=“abcdef”;
const testword2=“abcdefdexyz”;
const testword3=“你好,我没有潜艇”;
//函数接受一个word参数—要对其进行替换的word
//以及要替换的子参数
//以及替换子字符串所用内容的替换参数
//replaceall是一个布尔值,用于确定是执行完全替换还是单数替换
函数替换(word、sub、replacement、replaceall){
replaceall=replaceall | | false;//默认为单数替换
//获取要替换的子对象的第一个索引
常量startOfReplace=word.indexOf(sub);
//获取要替换的子字符串的结束索引
const endOfReplace=开始替换+子长度-1;
//替换后保存新词的变量
让我们替换DWORD=“”;
//如果找到子字符串,则使用给定的替换字进行替换
如果(开始替换>-1){
for(设i=0;i}否则如果(i>=startofflace&&i你能用indexOf吗?是的!我能用indexOf。我考虑过如何使用indexOf,但我没有想出一个解决办法solution@thatdudemasquerade是否要替换多次出现的内容?例如,您的示例字符串是
abcdefgbcd
,您应该获得
aDENIEDefgDENIED
还是
aDENIEDefgbcd
???如果源代码为
abcdefgbcd
,则此操作失败,它只替换第一次出现的内容。您不能说replaceAll.normale String.replace适用于第一次occurrence@RyanWilson我没有意识到OP需要替换所有事件,但是也添加了这个案例。谢谢!我只是猜测OP需要替换所有事件,但是我会的我打赌你会想做一个完整的替换。非常感谢你!你的代码非常有用,我理解我的错误。@ThatDude伪装你不客气。很高兴帮助你!:)