如何查找并选择下一个粗体字

时间:2016-05-03 04:14:26

标签: google-apps-script google-docs

https://gist.github.com/oshliaer/d468759b3587cfb424348fa722765187开始,可以从findText中选择一个特定的单词,我想只为粗体字实现相同的单词

我有找到粗体的功能。如何修改上述要点?

var startFlag = x;
var flag = false;

for (var i = x; i < y; i++) {
    if (text.isBold(i) && !flag) {
        startFlag = i;
        flag = true;
    } else if (!text.isBold(i) && flag) {
        flag = false;
        rangeBuilder.addElement(text, startFlag, i - 1);
        doc.setSelection(rangeBuilder.build());
        return;
    }
}
if (flag) {
    rangeBuilder.addElement(text, startFlag, i - 1);
    doc.setSelection(rangeBuilder.build());
    return;
}

2 个答案:

答案 0 :(得分:1)

让我们假设另一种算法

/*
 * @param {(DocumentApp.ElementType.LIST_ITEM | DocumentApp.ElementType.PARAGRAPH)} element
 */
function hasBold(element, start) {
  var text = element.editAsText();
  var length = element.asText().getText().length;
  var first = -1;
  var end = -1;
  while (start < length) {
    if (first < 0 && text.isBold(start)) {
      first = start;
    }
    if (first > -1 && !text.isBold(start)) {
      end = start - 1;
      return {
        s: first,
        e: end
      }
    }
    start++;
  }
  if (first > -1) {
    return {
      s: first,
      e: length - 1
    }
  }
  return false;
}

它不干净,但我已经测试过,它运行正常。

hasBold让我们在当前元素中找到粗体。

最后,我们必须在document.getBody()

中循环此功能

您可以在此处获取完整代码find next bold text in google document。 您也可以尝试it on a copy

一个新想法

直接搜索

最好的方法是在检查时使用回调

var assay = function (re) {
  var text = re.getElement()
    .asText();
  for (var offset = re.getStartOffset(); offset <= re.getEndOffsetInclusive(); offset++) {
    if (!text.isBold(offset)) return false;
  }
  return true;
}

function findNextBold() {
  var sp = 'E.';
  Docer.setDocument(DocumentApp.getActiveDocument());
  var rangeElement = Docer.findText(sp, Docer.getActiveRangeElement(), assay);
  rangeElement ? Docer.selectRangeElement(rangeElement) : Docer.setCursorBegin();
}

大致搜索

 var assay = function(re) {
 var text = re.getElement().asText();

 var startOffset = re.getStartOffset();
 var endOffset = re.getEndOffsetInclusive() + 1;

 for (var offset = startOffset; offset < endOffset; offset++) {
   if (!text.isBold(offset)) return false;
 }

 return this.test(text.getText().slice(startOffset, endOffset));
}

function findNextBold() {

  var searchPattern = '[^ ]+@[^ ]+';
  var testPattern = new RegExp('^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$');
  Docer.setDocument(DocumentApp.getActiveDocument());
  var rangeElement = Docer.findText(searchPattern, Docer.getActiveRangeElement(), assay.bind(testPattern));
  rangeElement ? Docer.selectRangeElement(rangeElement) : Docer.setCursorBegin();

}

Docer

答案 1 :(得分:1)

是。可以找到粗体文本。您需要使用findText(searchPattern)使用正则表达式搜索特定文本模式的元素内容。提供的正则表达式模式独立地匹配当前元素中包含的每个文本块。然后,使用isBold()检索粗体设置。它是 Boolean ,它返回文本是粗体还是null。