Google Apps 脚本:查找所有匹配项并设置样式

Google Apps Script: find all occurrences and set style

我无法弄清楚 find/next 在 Google Apps 脚本中的工作原理。 在这里的示例中,我试图在作者列表中为数字添加上标。但是我的循环没有退出,大概是因为它只是一遍又一遍地选择第一项。

编辑:更新了'from'参数:循环仍然没有退出?我添加了一些日志注释,它仍然卡在第一项上(起始偏移量和结束偏移量均为 = 10)

  var doc = DocumentApp.create('test1');
  var authors = "Josh Smith1, Zach Johnson2";
  var paragraph = doc.getBody().appendParagraph(authors);
  var text = paragraph.editAsText();
  var range = text.findText('[0-9]+');

  while(range)
  {      
    Logger.log("START OFFSET: " + range.getStartOffset());
    Logger.log("END OFFSET: " + range.getEndOffsetInclusive());
    Logger.log("PARAGRAPH ELEMENT: "+ paragraph.editAsText().getText());        
    text.setTextAlignment(range.getStartOffset(),range.getEndOffsetInclusive(),DocumentApp.TextAlignment.SUPERSCRIPT);
    range = text.findText('[0-9]+', range);
  }

原创

var authors = "Josh Smith1, Zach Johnson2";
var paragraph = doc.getBody().appendParagraph(authors);
var text = paragraph.editAsText();
var range = text.findText('[0-9]+');


while(range)
{
  text.setTextAlignment(range.getStartOffset(),range.getEndOffsetInclusive(),DocumentApp.TextAlignment.SUPERSCRIPT);
  range = text.findText('[0-9]+');
}

INFO: 这里提供的解决方案是正确的,但就目前而言there is a bug in Google Apps Script,这会使这段代码循环。日期未定。

你说得对,它卡在了第一项上。但是,它真的很容易修复。 findText() 函数可以带一个或两个参数。第一个参数始终是搜索模式,第二个可选参数是一个位置 from where it should start searching。所以固定码是:

var authors = "Josh Smith1, Zach Johnson2";
var paragraph = doc.getBody().appendParagraph(authors);
var text = paragraph.editAsText();
var range = text.findText('[0-9]+');

while(range)
{      
  text.setTextAlignment(range.getStartOffset(),range.getEndOffsetInclusive(),DocumentApp.TextAlignment.SUPERSCRIPT);
  range = text.findText('[0-9]+', range);
}

这应该可以为您解决。