Ter*_*nce 5 google-apps-script
有什么想法为什么Google Docs脚本似乎不支持这种简单的RegEx?
foo(?!bar)
我假设Google Apps脚本使用与JavaScript相同的RegEx。不是吗
我这样使用RegEx:
DocumentApp.getActiveDocument().getBody().replaceText('foo(?!bar)', 'hello');
Run Code Online (Sandbox Code Playgroud)
这将产生错误:
ScriptError:无效的正则表达式模式foo(?!bar)
正如对此问题的评论中所讨论的,这是一个记录在案的限制;该replaceText()方法不支持反向查找或任何其他捕获组。
不完全支持 JavaScript 正则表达式功能的子集,例如捕获组和模式修饰符。参考
Serge 提出了一种解决方法,“应该可以在较低级别操作您的文档(从段落中提取文本等),但它可能很快就会变得相当麻烦。”
这就是它的样子。如果您不介意丢失所有格式,此示例将应用捕获组、RegExp 标志(i不区分大小写)和反向查找来进行更改:
小兔子Foo Foo,跑过foobar。
到:
小兔子 Fred Fred,在 foobar 中奔跑。
代码:
function myFunction() {
var body = DocumentApp.getActiveDocument().getBody();
var paragraphs = body.getParagraphs();
for (var i=0; i<paragraphs.length; i++) {
var text = paragraphs[i].getText();
paragraphs[i].replaceText(".*", text.replace(/(f)oo(?!bar)/gi, '$1red') );
}
}
Run Code Online (Sandbox Code Playgroud)