如何使用.replaceText()方法将不同子元素中的多行内容替换为“deleted”?
解决Google Docs中跨多行{{...}}内容的替换问题
你想用Google Apps Script的replaceText()方法,把文档中被{{和}}包裹的跨多行内容替换成deleted,但原正则无效,问题根源和解决方法如下:
原代码的问题
- Google Apps Script采用RE2正则语法,不支持
(?s)(DOTALL)模式,原代码里的(?s)会被当作普通字符处理,无法让.匹配换行 .默认不匹配换行符,没法覆盖跨多行的内容- JS字符串中反斜杠需要双重转义,原代码的转义写法有误
修正后的代码
var body = DocumentApp.getActiveDocument().getBody(); body.replaceText("\\{\\{[\\s\\S]*?\\}\\}","deleted");
代码解析
\\{\\{:对{{进行双重转义,确保正则能正确识别这两个特殊字符[\\s\\S]*?:\\s匹配所有空白字符(包括换行),\\S匹配非空白字符,二者组合能匹配任意字符;*?是非贪婪匹配,保证只匹配到最近的}},不会误将多个{{...}}块合并替换\\}\\}:对}}`进行双重转义,匹配结尾标记
效果验证
输入:
... {{ lorem ipsum lorem ipsum lorem ipsum }} ...
输出:
... deleted ...
内容的提问来源于stack exchange,提问作者Aleksandr Pomozov
相关产品推荐
相关产品推荐

