我遇到一个问题,我需要用一些HTML替换所选文本以获取注释功能。我到达取代文本。但现在问题是文档可能包含重复的字符串,当我尝试替换它时,它总是替换段落中的第一个实例。我的代码在下面给出。
需要从各个位置的json替换所有注释。任何人都可以帮我解决如何在精确位置替换/插入文本吗?
for (var i = 0; i < AnnotationDetails.length; i++)
{
//locate the string between start and end point
var TextToReplace = OutPutText.substring(AnnotationDetails[i].start, AnnotationDetails[i].end);
//prepare replace text
var AnnotationClass = '<mark data-entity="' + AnnotationDetails[i].label + '" data-id="' + AnnotationDetails[i]._id + '">' + TextToReplace + '</mark>';
var AnnotationText = $('.output').html();
//put text back as html to div
$('.output').html(AnnotationText.replace(TextToReplace, AnnotationClass));
}
下面给出了json。
"annotations": [
{
"_id": "FWFpjaec",
"start": "6123",
"end": "6155",
"label": "support"
}
]
我有段落字符串&#34;规划和保护联盟&#34;可在两个地方找到。所以每当我尝试替换第二个实例时,javascript总是替换第一个实例。 json中的起点和终点是精确的,但任何方法都可以在精确的位置替换它?
答案 0 :(得分:0)
如果我理解正确你有正则表达式问题。 String.replace 该方法可以接受正则表达式以及第一个参数。
因为我不知道你的代码中textToReplace
是什么,所以我会向你展示更好的理解。
const q=el=>document.querySelector(el);//dont mind this line
const txt=q("div").innerText;
console.log(txt)//test test test
const strOne=txt.replace("test","hey")//this will change the first one only
q("#stringAsFirstParam").innerText=strOne
const regexOne=txt.replace(/test/g,"hey")//i set the global flag as well so it wont stop afther the first match
q("#regexAsFirstParam").innerText=regexOne
<div>test test test</div>
<div id="stringAsFirstParam"></div>
<div id="regexAsFirstParam"></div>
由于您要求更换特定事件,我只准备了另一个片段,请查看
const q=el=>document.querySelector(el);//dont mind this line
const txt=q("div").innerText;
console.log(txt)//test test test
const strOne=txt.replace("test","changed");//this will change the first one only
q("#stringAsFirstParam").innerText=strOne
const regexOne=txt.replace(/test/g,"changed");//i set the global flag as well so it wont stop afther the first match
q("#regexAsFirstParam").innerText=regexOne
let count=0
const WhichOneDoINeed=2
let current=0
const secondOnly= txt.replace(/test/g,function(match){
if (++current==WhichOneDoINeed){
return "changed"
}
return match
})
q("#secondOnly").innerText=secondOnly
<div>test test test</div>
<div id="stringAsFirstParam"></div>
<div id="regexAsFirstParam"></div>
<div id="secondOnly"></div>