replaceText()正则表达式“不跟”

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)

Mog*_*dad 6

正如对此问题的评论中所讨论的,这是一个记录在案的限制;该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)