首页 > 解决方案 > 使用字符开始和结束位置的多个唯一字符串替换

问题描述

我有一个文本字符串:

Google is a search engine created by Larry Page and Sergey Brin.

还有一个嵌套的命名实体数组:

[["Google","ORG",0,5],["search engine","PRODUCT",12,24],["Larry Page","PERSON",37,46],["Sergey Brin","PERSON",52,62]]

我想用 html 元素替换每次出现的命名实体,类似于替换Google为:

`<div class="ner-tag">${named_entity[i][0]} <span class="ner-tag-type">${named_entity[i][1]}</span></div>`

但是,如果我一个一个地做这些,那么整个角色的位置就会改变,所以除非我也跟踪这些,否则我将无法使用这些。有时,您会得到一个字符串,其中既有类似的GoogleGoogle Docs又有这些是不同的实体,所以我不能轻易地做一个简单的全局替换。

任何指针?

标签: javascript

解决方案


您可以通过使用基于索引的替换信息降序对数组进行排序来做到这一点,这是一个示例:

const str = 'Google is a search engine created by Larry Page and Sergey Brin.';
const replacements = [["Google","ORG",0,5],["search engine","PRODUCT",12,24],["Larry Page","PERSON",37,46],["Sergey Brin","PERSON",52,62]];

replacements.sort((a, b) => b[2] - a[2]);

const result = replacements.reduce((a, replacement) => {
  return a.substring(0, replacement[2]) + replacement[1] + a.substring(replacement[3] + 1)
}, str);


console.log(result);


推荐阅读