首页 > 解决方案 > 用 in 字符串替换两个索引之间的多个字符串

问题描述

我有一个字符串。我想substrings用字符串替换。对于每个substring我都有开始和结束索引。使用regex超出范围。

所以 from let str = "我想要点餐厅的鸡肉披萨和奶酪披萨";

预期的结果将是这样的。

I want TYPE1 TYPE4 and TYPE1 pizza from point restaurant

let str = "I want chicken pizza and cheese pizza from point restaurant";

let roles = [{
    "start": 7,
    "end": 14,
    "typeId": "TYPE1",
    "type": "toppings",
    "text": "chicken"
  },
  {
    "start": 25,
    "end": 31,
    "typeId": "TYPE1",
    "type": "toppings",
    "text": "cheese"
  },
  {
    "start": 15,
    "end": 20,
    "typeId": "TYPE4",
    "type": "main ingredient",
    "text": "pizza"
  }
];

let styledStr = str;
roles.map(r => {
  const { start, end, typeId, text } = r;
  let strArr = str.split('');
  let removeStr = strArr.splice(start, end, typeId);
  styledStr = strArr.join('');
  console.log(styledStr);
});

标签: javascriptarraysstringreplacesubstring

解决方案


  1. 如果您不需要地图,请不要使用地图
  2. 除非您必须使用拼接,否则无需拆分

使用 start 和 end 的方法 -注意我对角色进行排序,所以我们从最高位置开始

let str = "I want chicken pizza and cheese pizza from point restaurant";

let roles = [{
    "start": 7,
    "end": 14,
    "typeId": "TYPE1",
    "type": "toppings",
    "text": "chicken"
  },
  {
    "start": 25,
    "end": 31,
    "typeId": "TYPE1",
    "type": "toppings",
    "text": "cheese"
  },
  {
    "start": 15,
    "end": 20,
    "typeId": "TYPE4",
    "type": "main ingredient",
    "text": "pizza"
  }
];

let styledStr = str;
roles.sort((a,b)=>b.start-a.start)
roles.forEach(r => {
  const { start, end, typeId, text } = r;
  // Using substring because it is more readable and saves a split
  styledStr = styledStr.substring(0,start) + typeId + styledStr.substring(end)
  styledStr.slice(start,end,typeId)
});
console.log(styledStr)

使用文本替换的方法

let str = "I want chicken pizza and cheese pizza from point restaurant";

let roles = [{
    "start": 7,
    "end": 14,
    "typeId": "TYPE1",
    "type": "toppings",
    "text": "chicken"
  },
  {
    "start": 25,
    "end": 31,
    "typeId": "TYPE1",
    "type": "toppings",
    "text": "cheese"
  },
  {
    "start": 15,
    "end": 20,
    "typeId": "TYPE4",
    "type": "main ingredient",
    "text": "pizza"
  }
];

let styledStr = str;
roles.forEach(r => {
  const { start, end, typeId, text } = r;
  console.log(start,end,text)
  styledStr = styledStr.replace(text,typeId)
});
console.log(styledStr)


推荐阅读