以下是Google用于展示部分文本元素的示例。这用于不是整个元素的选定文本(例如,仅选择句子片段)。我需要将强化的动作替换为执行正则表达式替换的动作。 replaceText()
函数不接受整数来告诉它从哪里开始和结束(与setBold()
函数不同)。
This是一个非常相似(未答复)的问题,但我相信Google Scripts已经更改了一些命令,因此我认为值得重新发布。
Google的例子是:
// Bold all selected text.
var selection = DocumentApp.getActiveDocument().getSelection();
if (selection) {
var elements = selection.getRangeElements();
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
// Only modify elements that can be edited as text; skip images and other non-text elements.
if (element.getElement().editAsText) {
var text = element.getElement().editAsText();
// Bold the selected part of the element, or the full element if it's completely selected.
if (element.isPartial()) {
text.setBold(element.getStartOffset(), element.getEndOffsetInclusive(), true);
} else {
text.setBold(true);
}
}
}
}
答案 0 :(得分:1)
replaceText
方法的正则表达式实现不支持外观或捕获组,这使得无法使用它进行部分替换。
解决方法是使用JavaScript替换来准备新的子字符串,然后使用replaceText将其放置到位。这样可以保留文本的格式,即使斜体部分与替换发生时的选择重叠。一个潜在的缺点是,如果元素包含与选择相同的一段文本,那么也会发生替换。
var text = element.getElement().editAsText();
if (element.isPartial()) {
var start = element.getStartOffset();
var finish = element.getEndOffsetInclusive() + 1;
var oldText = text.getText().slice(start, finish);
var newText = oldText.replace(/a/g, "b");
text.replaceText(oldText, newText);
}