Google Docs脚本如何单独提取同一行内▶◁符号间的文本并修改样式
问题原因
- 现有脚本的正则规则错误:
▶([^\S]+)◁中的[^\S]等价于空白字符匹配规则,只能匹配▶、◁之间全为空白的内容,匹配逻辑异常会导致整行被误识别为匹配内容。 - 若需要仅修改两个符号中间的文本、不改动▶◁本身的样式,需要调整匹配后的起止偏移量。
修正后代码
var body = DocumentApp.getActiveDocument().getBody(); // 正则改为非贪婪匹配,正确识别每一对▶◁包裹的内容 var foundElement = body.findText('▶(.*?)◁'); while (foundElement != null) { var foundText = foundElement.getElement().asText(); var start = foundElement.getStartOffset(); var end = foundElement.getEndOffsetInclusive(); // 若需要连▶◁符号一起修改样式,直接用原始start、end即可 // 若仅修改中间内容,用下方的偏移量: // var contentStart = start + 1; // var contentEnd = end - 1; // 这里示例是连符号一起修改,需要仅改中间就把start、end换成上面的contentStart、contentEnd foundText.setBold(start, end, true); foundText.setForegroundColor(start, end, "#ff326d"); // 查找下一个匹配项 foundElement = body.findText('▶(.*?)◁', foundElement); }
修改说明
- 正则替换为
▶(.*?)◁,?表示非贪婪匹配,会匹配最短的符合规则的内容,不会出现跨多对▶◁匹配的问题,也能正确识别中间包含任意文本的内容。 - 按需调整偏移量即可实现仅修改中间内容、或连包裹符号一起修改的效果,不会再出现整行被修改的问题。
内容的提问来源于stack exchange,提问作者kate
相关产品推荐
相关产品推荐

