google 应用程序脚本中的部分文本元素内的正则表达式替换
Regex replacement within a partial text element in google apps script
下面是 Google 加粗部分文本元素的示例。这用于不是整个元素的选定文本(例如,仅选择了一个句子片段)。我需要用执行正则表达式替换的动作来替换胆大妄为的动作。 replaceText()
函数不接受整数来告诉它从哪里开始和结束(与 setBold()
函数不同)。
This 是一个非常相似(未回答)的问题,但我相信 Google 脚本更改了一些命令,因此我认为值得再次发布。
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);
}
}
}
}
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);
}
下面是 Google 加粗部分文本元素的示例。这用于不是整个元素的选定文本(例如,仅选择了一个句子片段)。我需要用执行正则表达式替换的动作来替换胆大妄为的动作。 replaceText()
函数不接受整数来告诉它从哪里开始和结束(与 setBold()
函数不同)。
This 是一个非常相似(未回答)的问题,但我相信 Google 脚本更改了一些命令,因此我认为值得再次发布。
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);
}
}
}
}
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);
}