2017-05-02 78 views
1

我知道Google Doc元素的findText函數不使用常規正則表達式(它改用RE2)。我遇到了一個正則表達式問題,一個經過驗證的,相對簡單且看似受支持的正則表達式塊在Apps腳本中反常地返回空結果。應用程序腳本文檔的findText

想知道是否有人可以發現/解釋原因。謝謝!


我申請下面的代碼與一些降價代碼塊蜱一個block of text(```)。當我使用類似的代碼塊將下面顯示的正則表達式粘貼到regexer.com時,RegEx返回正確的結果。但是,在我的文檔上運行下面的代碼會返回空結果。

我懷疑在我的代碼中有一些RE2不支持的正則表達式元素,但文檔沒有闡明這一點。有任何想法嗎?

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'

+0

該文檔未共享。請公開。 –

+0

如果文本跨越段落,它並不那麼直截了當。嘗試'var codeBlockRegEx =/\'{3}([\ s \ S] *?)\'{3}/g;',但它可能不起作用。 –

回答

1

我收到null作爲良好,我能夠得到以下使用3`周邊段落中的單詞測試工作。

我沒有找到這方面的信息: findText方法的類文本在Apps腳本中的對象,擴展Google文檔。文檔說:「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); 
 
    } 
 
}

相關問題