Reputation: 31
I wrote a function for using a spinText synonyms in docs. Ie. I have a text in the document like this: "{Hello|Hi} Mr {Thomas|Mathew|Andrew}"
Function give me 2 arrays: toreplace[], synonyms[] but the result of
for (var i = 0; i < rangeElements.length; ++i) {
body.replaceText(toreplace[i],synonyms[i]);
}
give me a text like this: Hi|Hi Mr Andrew|Andrew|Andrew but i would like to get "Hi Mr Andrew".
I tried Logger.log(toreplace[0]) and gets "{Hello|Hi}" and Logger.log(synonyms[0]) show "Hi" so it should be translated into body.replaceText('{Hello|Hi}','Hi');
What i am doing wrong?
function synonymize() {
var body = DocumentApp.getActiveDocument().getBody();
var rangeElements = [];
var rangeElement=null;
var start=[];
var end=[];
var lentabs=[];
var str;
var synonyms=[];
var toreplace=[];
var x=0;
while (rangeElement = body.findText('[{].+?[}]',rangeElement))
{
rangeElements.push(rangeElement);
start.push(rangeElement.getStartOffset());
end.push(rangeElement.getEndOffsetInclusive());
}
for (var i = 0; i < rangeElements.length; ++i) {
lentabs[i]=rangeElements[i].getElement().getText().substring(start[i]+1, end[i]).split('|').length
toreplace[i]=rangeElements[i].getElement().getText().substring(start[i], end[i]+1);
min=0;
max=lentabs[i]-1;
rand=Math.floor(Math.random()*(max-min+1)+min)
synonyms.push(rangeElements[i].getElement().getText().substring(start[i]+1, end[i]).split('|')[rand]);
}
for (var i = 0; i < rangeElements.length; ++i) {
body.replaceText(toreplace[i],synonyms[i]);
}
}
Upvotes: 0
Views: 1963
Reputation: 31
Ok. The problem was in the "|" which is treated as a regex pattern. I changed text in the document to "{Hello#Hi} Mr {Thomas#Mathew#Andrew}" and now it's working ok.
Upvotes: 2