为什么 String.replace 缩短我的字符串
Why is String.replace shortening my string?
我制作了一个脚本来动态更改字符串以满足我的需求。它应该可以替换字符串内的标记("[pid]","[dir]","[+X]"(。但是,我发现 string.replace(( 方法存在一个问题,该方法会切断我的字符串,从而留下重要信息。
下面是最终字符串的外观(放入代码示例中以提高可读性(:
'summon FallingSand ~ ~4 ~ {Time:1,Data:0,TileID:152,Riding:{id:FallingSand,DropItem:0b,Time:1,Block:minecraft:command_block,TileEntityData:{Command:fill ~ ~1 ~-1 ~ ~-5 ~ air},Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:1,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:152,Riding:{id:FallingSand,DropItem:0b,Time:1,Block:minecraft:command_block,TileEntityData:{Command:kill @e[type=MinecartCommandBlock,r=4]},Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:1,Riding:{id:MinecartCommandBlock,Command:setblock ~ ~ ~ air,Riding:{id:MinecartCommandBlock,Command:/kill @e[type=Item,r=4],Riding:{id:MinecartCommandBlock,Command:/tellraw @a {text:"Thanks to gentlegiantJGC and xafonyz for making the MCedit filter to make this possible",color:gold},Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-4 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=8,score_pe_dir=8,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] 0 -2 0 particle smoke ~ ~ ~ 0 -10 0 0.1 0 force'",x:41,y:1,z:-79,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=9,score_pe_dir=9,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] 0 3 0 particle smoke ~ ~ ~ 0 10 0 0.1 0 force'",x:41,y:1,z:-77,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-4 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=10,score_pe_dir=10,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] 0 0.5 -2 particle smoke ~ ~ ~ 0 0 -10 0.1 0 force'",x:42,y:1,z:-79,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=11,score_pe_dir=11,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] 0 0.5 2 particle smoke ~ ~ ~ 0 0 10 0.1 0 force'",x:42,y:1,z:-77,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-4 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=13,score_pe_dir=13,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] 2 0.5 0 particle smoke ~ ~ ~ 10 0 0 0.1 0 force'",x:43,y:1,z:-79,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=12,score_pe_dir=12,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] -2 0.5 0 particle smoke ~ ~ ~ -10 0 0 0.1 0 force'",x:43,y:1,z:-77,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:157,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:152,Riding:{id:Item,Age:5996,Motion:[0.0,0.0,-0.1]}}}}}}}}}}}}}}}}}}}}}}}}}}}'
但是,它是这样的:
'summon FallingSand ~ ~4 ~ {Time:1,Data:0,TileID:152,Riding:{id:FallingSand,DropItem:0b,Time:1,Block:minecraft:command_block,TileEntityData:{Command:fill ~ ~1 ~-1 ~ ~-5 ~ air},Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:1,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:152,Riding:{id:FallingSand,DropItem:0b,Time:1,Block:minecraft:command_block,TileEntityData:{Command:kill @e[type=MinecartCommandBlock,r=4]},Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:1,Riding:{id:MinecartCommandBlock,Command:setblock ~ ~ ~ air,Riding:{id:MinecartCommandBlock,Command:/kill @e[type=Item,r=4],Riding:{id:MinecartCommandBlock,Command:/tellraw @a {text:"Thanks to gentlegiantJGC and xafonyz for making the MCedit filter to make this possible",color:gold},Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,<b>Com...</b> ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=12,score_pe_dir=12,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] -2 0.5 0 particle smoke ~ ~ ~ -10 0 0 0.1 0 force",x:43,y:1,z:-79,id:"Control"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:"@",Command:"/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=3,score_pe_particle=3,score_pe_dir_min=13,score_pe_dir=13,score_pe_ctrl5_min=1,score_pe_ctr5=1,r=32] 2 0.5 0 particle smoke ~ ~ ~ 10 0 0 0.1 0 force",x:43,y:1,z:-77,id:"Control"}",Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:157,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:152,Riding:{id:Item,Age:5996,Motion:[0.0,0.0,-0.1]}}}}}}}}}}}}}}}}}}}}}}}}}}}'
这是一个很大的区别,它使我无法使用它。任何已知的解决方法?
以下是整个脚本:
var pid = 3;
var particle = "smoke";
var freq = 5;
var baseCommand = 'summon FallingSand ~ ~4 ~ {Time:1,Data:0,TileID:152,Riding:{id:FallingSand,DropItem:0b,Time:1,Block:minecraft:command_block,TileEntityData:{Command:fill ~ ~1 ~-1 ~ ~-5 ~ air},Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:1,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:152,Riding:{id:FallingSand,DropItem:0b,Time:1,Block:minecraft:command_block,TileEntityData:{Command:kill @e[type=MinecartCommandBlock,r=4]},Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:1,Riding:{id:MinecartCommandBlock,Command:setblock ~ ~ ~ air,Riding:{id:MinecartCommandBlock,Command:/kill @e[type=Item,r=4],Riding:{id:MinecartCommandBlock,Command:/tellraw @a {text:"Thanks to gentlegiantJGC and xafonyz for making the MCedit filter to make this possible",color:gold},Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-4 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"[-Y]'",x:41,y:1,z:-79,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~2 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"[+Y]'",x:41,y:1,z:-77,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-4 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"[-Z]'",x:42,y:1,z:-79,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~3 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"[+Z]'",x:42,y:1,z:-77,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-4 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"[-X]'",x:43,y:1,z:-79,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-3 minecraft:redstone_block 0 destroy",Riding:{id:MinecartCommandBlock,Command:"setblock ~4 ~-2 ~-2 minecraft:command_block 1 replace {CustomName:'"@'",Command:'"[+X]'",x:43,y:1,z:-77,id:'"Control'"}",Riding:{id:MinecartCommandBlock,Command:buffer,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:157,Riding:{id:FallingSand,DropItem:0b,Time:1,Data:0,TileID:152,Riding:{id:Item,Age:5996,Motion:[0.0,0.0,-0.1]}}}}}}}}}}}}}}}}}}}}}}}}}}}';
var baseParticleCmd = '/execute @a ~ ~ ~ /execute @e[type=ArmorStand,name=ParticleEmitterDisplay,score_pe_particle_min=[pid],score_pe_particle=[pid],score_pe_dir_min=[dir],score_pe_dir=[dir],score_pe_ctrl[freq]_min=1,score_pe_ctr[freq]=1,r=32] [rx] [ry] [rz] particle [particle] ~ ~ ~ [dx] [dy] [dz] 0.1 0 force';
var dirIndex = {
"8": "-Y",
"9": "+Y",
"10": "-Z",
"11": "+Z",
"12": "-X",
"13": "+X"
};
function replace(str,v1,v2) {
while(str.indexOf(v1) > -1){
str = str.replace(v1,v2);
}
return str;
}
for(var dir = 8; dir <= 13; dir++){
var cmd = baseParticleCmd;
var rx = 0;
var ry = 0.5;
var rz = 0;
var dx = 0;
var dy = 0;
var dz = 0;
var axis = dirIndex["" + dir + ""];
if(axis.charAt(1) === "X"){
rx = (axis.charAt(0) + "2") - 0;
dx = (axis.charAt(0) + "10") - 0;
} else if(axis.charAt(1) === "Y"){
ry = (axis.charAt(0) + "2") - 0;
if(axis.charAt(0) === "+"){
ry = 3;
}
dy = (axis.charAt(0) + "10") - 0;
} else if(axis.charAt(1) === "Z"){
rz = (axis.charAt(0) + "2") - 0;
dz = (axis.charAt(0) + "10") - 0;
}
cmd = replace(cmd,"[pid]",pid);
cmd = replace(cmd,"[freq]",freq);
cmd = replace(cmd,"[dir]",dir);
cmd = replace(cmd,"[rx]",rx);
cmd = replace(cmd,"[ry]",ry);
cmd = replace(cmd,"[rz]",rz);
cmd = replace(cmd,"[dx]",dx);
cmd = replace(cmd,"[dy]",dy);
cmd = replace(cmd,"[dz]",dz);
cmd = replace(cmd,"[particle]",particle);
baseCommand = baseCommand.replace(("[" + axis + "]"),cmd);
}
prompt("Command:",baseCommand);
你的代码有效。破坏结果的是prompt
。看看小提琴。我将结果分配给可以复制的<textarea>
默认情况下,当将字符串作为搜索参数传递时,String.replace 将仅替换匹配的第一个实例。您可以将搜索参数重新定义为正则表达式(并包含g
参数,即 String.replace(/regex/g, 'replace'((,或者您可以尝试以下方法:
JavaScript 非正则表达式替换
它使用.split
和.join
的混合,而不是使用.replace
相关文章:
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- 将特定的正则表达式模式与我的字符串匹配
- 函数将我的字符串更改为完全不同的值
- 如何检查我的字符串是否包含某些单词
- 如何让我的字符串替换为等于表单输入的值
- Javascript substring() 从我的字符串中返回错误的值
- 为什么我的字符串不是字符串
- 当我的字符串太长时,ParseFloat 的奇怪行为
- 如何编写正则表达式以匹配我的字符串
- encodeURIComponent 似乎在我的字符串中添加了一个字符
- 为什么“ 新字符串('我的字符串');“ 返回一个对象?但是“ 字符串(”我的字符串“);“返回一个字符
- 找到我的字符串所在的数组,并将其发送到变量javascript中
- 为什么我的字符串没有通过正则表达式
- Javascript Regex没有'我的字符串不匹配
- 为什么未定义会被添加到我的字符串中
- 如何获取已删除的字符并在文本区域内更新我的字符串
- Javascript函数将我的字符串参数视为整数
- JavaScript正在从我的字符串中删除反斜杠
- 为什么我的字符串只工作,当我把它手动
- 为什么我的字符串值可以通过淘汰验证,而整数值却不能