javascript - 使用字符开始和结束位置的多个唯一字符串替换
问题描述
我有一个文本字符串:
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>`
但是,如果我一个一个地做这些,那么整个角色的位置就会改变,所以除非我也跟踪这些,否则我将无法使用这些。有时,您会得到一个字符串,其中既有类似的Google
,Google Docs
又有这些是不同的实体,所以我不能轻易地做一个简单的全局替换。
任何指针?
解决方案
您可以通过使用基于索引的替换信息降序对数组进行排序来做到这一点,这是一个示例:
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);
推荐阅读
- java - JAVA中WAV文件中的声音持久性
- javascript - 在 PWA (Android) 上禁用 Google 搜索 Snackbar
- python - Python计算具有特殊值的行
- javascript - 更新 Firestore 数据库中的数据
- flutter - 如何在 Flutter 中有两个不同的文本位置(顶部和底部)?
- c# - 拖放时如何保留按钮单击功能?
- excel - 从 xls 导入范围
- jquery - 关闭时间必须大于打开时间
- react-native - usestate 挂钩与计时器在 useeffect 挂钩内无法正常工作
- mysql - MySQL LOAD XML LOCAL INFILE:忽略特定标签