OuterSpace
OuterSpace

Reputation: 31

body.replaceText() in Google Docs

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

Answers (1)

OuterSpace
OuterSpace

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

Related Questions