如何替换句子的多个位置的文本?

时间:2017-11-03 16:30:12

标签: javascript string algorithm

我正在寻找一种用于更改句子的多个位置的文本的算法。 例如,我们有下一个文本:

丽贝卡布莱克周五赚了多少钱?

所以,我有一个对象,它包含两个需要更改的位置:

[{
    offset: 19,
    length: 13
}, {
    offset: 45,
    length: 6
}]

Rebecca Black Friday 需要替换为相同或不同的文字...让我们说树屋 ...没有'真的很重要......

所以我的句子应该是这样的 * Treehouse 树屋赚了多少钱?*

我到目前为止的解决方案是向后运行并逐个替换文本。它将确保正确分配职位,但这有点复杂。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

首先,您可以按sort字段offset数组,然后只需将替换的函数应用于所需的string

  

为什么要排序?

因为在这个问题上我们可以从字符串的end替换为此字符串的start

如果没有,那么我们可能会遇到问题:如果我们用文本替换文本会发生什么?

然后可能offsets超过字符串长度。

注意:该解决方案并不能保证我们不会拥有 给定字符串的超越(如果偏移量超过给定字符串的长度),但没有than给定数组的解决方案sorting更好let string='How much money has Rebecca Black made off of Friday?'; const replaceRange = (s, start, end, substitute) => s.substring(0, start) + substitute + s.substring(end); let array= [{ offset: 19, length: 13 }, { offset: 40, length: 2 }]; array.sort(function(a,b){ return b.offset-a.offset; }).forEach(function(item){ string=replaceRange(string,item.offset,item.offset+item.length,"XX"); }); console.log(string); /强>



{{1}}




答案 1 :(得分:1)

Kevin=10.1

Try it

答案 2 :(得分:1)

从技术上讲,这可以解决问题,但是样本数据会重叠。我只是用不同的数据来证明它有效。



var data = "How much money has Rebecca Black made off of Friday?".split('');

replace = [{
  offset: 19,
  length: 13
}, {
  offset: 0,
  length: 3
}];

replace.forEach(function(el) {
      data.forEach(function(dataElement, index) {
          if (index >= el.offset && index < (el.offset + el.length))
          	data[index] = "X";
          })
      })
data = data.join('');
console.log(data);
&#13;
&#13;
&#13;