javascript - 从JS中的字符串替换特定元素(唯一或重复)
问题描述
我的代码自动在字符串中搜索 /d+d/d+ 元素(掷骰子)并添加随机数后缀并将它们作为元素存储在数组中。
我想用我的数组的新修改元素创建一个新字符串。
(我不想在数组中拆分字符串,将相同的元素替换为全新数组中的另一个数组,然后将其加入字符串。我需要对其进行修改并将其保存在新字符串中)
例子:
字符串通过用户输入更改,所以如果我有:
str = ' I roll 1d3 and 2d4+3 and 1d3 also 1d8 and 1d8 dice ';
然后 mydice(str) 查找所有骰子名称并生成一个新数组,如下所示:
array = [ "1d3:[2]=2" , "2d4:[1,2]+3=6" , "1d3:[1]=1", "1d8:[7]=7", "1d8:[5]=5"] ;
期望的输出:
str = ' I roll 1d3:[2]=2 and 2d4:[1,2]+3=6 and 1d3:[1]=1 also 1d8:[7]=7 and 1d8:[5]=5 ';
解决方案
仅使用您提供的两项作为输入(字符串和带有ndn=(n)
单词种类的数组),您可以进行如下操作:
let str = ' I roll 1d3 and 2d4+3 and 1d3 also 1d8 and 1d8 dice ';
let array = [ "1d3:[2]=2" , "2d4:[1,2]+3=6" , "1d3:[1]=1", "1d8:[7]=7", "1d8:[5]=5"];
let i = 0;
for (let item of array) {
let find = item.replace(/:.*\]|=.*/g, "");
i = str.indexOf(find, i);
str = str.slice(0, i) + item + str.slice(i + find.length);
i += item.length;
}
console.log(str);
假定数组是格式正确的,即确实这些项目是从字符串中正确派生的,并且等号之前的所有字符串部分(如“1d3”)都出现在字符串中。
请注意,字符串是不可变的,因此您不能真正改变字符串。唯一的方法是创建一个新字符串并将其分配回同一个变量。但这不是突变;这是一个新字符串的分配。
推荐阅读
- python - 如何正确使用 OpenCV VideoWriter?
- python - 使用非十进制数据点 Matplotlib Python 生成正态分布
- c++ - 如何在 omnet++ 中访问子模块名称?
- .net - 使用运行时特定的实现有什么好处?
- php - 从多维数组中获取数据,Laravel
- python - 链接 Django QuerySet 子类的方法时避免 PyCharm 警告
- python - 导入音乐播放器、系统、操作系统、fnmatch、随机、pprint、Tkinter ModuleNotFoundError:没有名为“musicplayer”的模块
- c# - 如何在中间件 .Net Core Web API 中获取当前用户/声明主体
- javascript - SAPUI5:如何借助 MultiComboBox 实现菜单
- angular - 如何更改在父组件上使用的子组件中按钮的位置?