首页 > 解决方案 > 从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 '; 

标签: javascriptreplaceduplicatesunique

解决方案


仅使用您提供的两项作为输入(字符串和带有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”)都出现在字符串中。

请注意,字符串是不可变的,因此您不能真正改变字符串。唯一的方法是创建一个新字符串并将其分配回同一个变量。但这不是突变;这是一个新字符串的分配。


推荐阅读