3

我正在将 RegEx 搜索应用于带有一些降价代码块刻度 (```)的Google 文档文本。在我的文档上运行下面的代码会返回一个空结果。

var codeBlockRegEx = '`{3}((?:.*?\s?)*?)`{3}'; // RegEx to find (lazily) all text between triple tick marks (/`/`/`), inclusive of whitespace such as carriage returns, tabs, newlines, etc.
var reWithCodeBlock = body.findText(codeBlockRegEx); // reWithCodeBlock evaluates to 'null'

我怀疑我的代码中存在一些RE2不支持的正则表达式元素,但文档并没有说明这一点。有任何想法吗?

4

1 回答 1

4

我也收到了 null - 我能够在段落中使用 3 ` 包围单词 test 来获得以下内容。

我确实找到了以下信息: Apps Script 中 Text 类对象的 findText 方法,扩展了 Google Docs。文档说“不完全支持 JavaScript 正则表达式功能的子集,例如捕获组和模式修饰符。” 特别是,它不支持环视。

function findXtext() {
var body = DocumentApp.getActiveDocument().getBody();
  var foundElement = body.findText("`{3}(test)`{3}");

while (foundElement != null) {
    // Get the text object from the element
    var foundText = foundElement.getElement().asText();

    // Where in the element is the found text?
    var start = foundElement.getStartOffset();
    var end = foundElement.getEndOffsetInclusive();

    // Set Bold
    foundText.setBold(start, end, true);
  
   // Change the background color to yellow
    foundText.setBackgroundColor(start, end, "#FCFC00");

    // Find the next match
    foundElement = body.findText("`{3}(test)`{3}", foundElement);
   }
}

于 2017-05-02T18:35:10.157 回答