【问题标题】:Google App Script findText regex not working for new line characterGoogle App Script findText 正则表达式不适用于换行符
【发布时间】:2019-01-30 16:26:00
【问题描述】:

我正在尝试在我的 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]);         
  }
}

【问题讨论】:

  • 只是为了确定:您是否尝试添加\r"written[ \r\v\n]*consent"?
  • 是的,\r 和 \r\n 都试过了
  • 试试.getBody().editAsText()
  • 我仍在与这个简单的用例作斗争。是否真的不可能搜索通过硬换行符断开的文本并随后突出显示该文本?似乎是一个基本的用例

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


【解决方案1】:

如果这会起作用,您需要正则表达式处于s(单行)模式。每https://developers.google.com/apps-script/reference/document/body#findtextsearchpattern

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2020-07-07
    • 2013-09-08
    • 2019-08-26
    相关资源
    最近更新 更多