Google App脚本findText正则表达式不适用于换行符

时间:2018-08-24 08:18:45

标签: regex google-apps-script google-docs line-breaks

我正在尝试在我的Google文档中查找/修改文本,其中文本在整个换行符之间都被破坏了。当我在Google文档(CTRL + F)中手动找到文本,然后通过正则表达式对话框进行搜索时,下面的正则表达式起作用。令人困惑的是,为什么下面的代码在完整的换行符(即“ \ n”)下不能使用完全相同的正则表达式(请注意:“ \ v”换行符是可以的)。

第二种方法可以找到文本,但是我无能为力,因为我需要元素对象才能操纵文本。

  //Test document 1Q6v8ipqA81LoPtpk71NdqTaIEqMjki1KIJbrm0bILBg contains the following text:
  //
  //This Agreement shall not be assigned by either party without the prior\n
  //written consent of the parties hereto

  var doc = DocumentApp.openById('1Q6v8ipqA81LoPtpk71NdqTaIEqMjki1KIJbrm0bILBg');          

  //Method 1 - does NOT locate the text
  var body = doc.getBody(); 
  var pattern = "prior[\s]*written";  
  var foundElement = body.findText(pattern);    
  while (foundElement != null) {
    var foundText = foundElement.getElement().asText();    
    var start = foundElement.getStartOffset();
    var end = foundElement.getEndOffsetInclusive();

    foundElement = body.findText(pattern, foundElement);      
  }

  //Method 2 - locates the text, but I cannot acquire the element object 
  var body2 = doc.getBody().getText(); 
  var pattern2 = /prior[\s]*written/; 
  while (m=pattern2.exec(body2)) 
  { 
    Logger.log(m[0]);         
  }
}

1 个答案:

答案 0 :(得分:0)

如果此方法可行,则需要将正则表达式设置为s(单行)模式。根据{{​​3}},

不完全支持JavaScript正则表达式功能的子集,例如捕获组和模式修饰符。

所以看起来他们实际上已经选择不以任何方式支持多行匹配。