我如何找到并 select 下一个粗体字

How do I find and select a next bold word

https://gist.github.com/oshliaer/d468759b3587cfb424348fa722765187 开始,可以从 findText 中 select 一个特定的词,我只想对粗体词实施相同的操作

我有一个查找粗体的功能。如何修改以上要点?

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;
}

让我们假设另一种算法

/*
 * @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

是的。可以找到粗体文本。您需要使用 findText(searchPattern) to search the contents of the element for the specific text pattern using regular expressions. The provided regular expression pattern is independently matched against each text block contained in the current element. Then, use isBold() 来检索粗体设置。它是一个 布尔值,其中 returns 文本是粗体还是空值。