2014-02-25 37 views
0

我試圖用findText和正則表達式在一對兩個星號(即**This text, please**)之間找到不確定數量的文本(包括標點符號)。然後該腳本應該對星號和隨附的文本採取行動。我的代碼如下:雙星號正則表達式報告爲無效

function main() { 
    var search = body.findText('(\*\*)+([.*]+)+(\*\*)'); 
    if (search === null) { 
    DocumentApp.getUi().alert('No text was found that required formatting.'); 
    } else { 
    function second() { 
     if (search !== null) { 
     search = body.findText('(\*\*)+([.*]+)+(\*\*)'); 
     search.setBold(true); 
     body.replaceText('\*\*',''); 
     second(); 
     } else { 
     DocumentApp.getUi.alert('Formatting completed!'); 
    } 
    }; 
} 
}; 

我這樣的假設:工作findText只找到一個搜索模式的第一個實例。 現在,我完全意識到我的正則表達式不起作用,因爲捕捉組不支持,但還有什麼其他方式來搜索「詞組」?如果不能用單個正則表達式完成,是否有可能通過三次單獨的搜索來完成此操作?

+1

你.findText正則表達式下面不是雙星號之間的匹配是正確的。它應該更像:'\ * \ *(。*)\ * \ *'。 – MElliott

+0

此外,.findText將返回true或false。你應該檢查真或假。不是「null」。 – MElliott

+0

什麼是.replaceText()?這是來自其他插件或腳本的功能嗎?如何使用JavaScript'.replace()'?和search.setBold()?你正在調用.setBold()(不管那是什麼)布爾值..你的代碼有太多的問題.. – MElliott

回答

0

我很抱歉地宣佈,但它看起來像你正在嘗試執行的操作是不可能的。如documentation中所述,findText函數不支持任何regExp,並且您正在構建的那個看起來不被支持。
這是我對你的regExp:http://regex101.com/r/eN6vT9的重新表述:* {2}。*?* {2}
但是由於限制它不被支持,我唯一可以匹配匹配的就是一顆星。
當你找到一場比賽的時候,將比賽用粗體顯示的動作不起作用。它大膽的全部段落。我在這裏找到的唯一可能的解決方法是提取文本在提取的文本上執行正則表達式並替換所有文本,但在這種情況下,您將丟失所有其他文本格式化(並且我想這不是您要查找的內容)。
,我使用的代碼(未完全功能性的)

function main() { 
    var doc = DocumentApp.getActiveDocument(); 
    var body = doc.getBody(); 
    Logger.log(body.getText()); 
// body.setText("toto est content et il va ajouter des double stars ** et encore ** et encore **"); 
// var search = body.findText('\*{2}.*?\*{2}'); 
    var pattern = '/(\*\*)/'; 
    var search = body.findText(pattern); 
    Logger.log(search); 
    if (search == null) { 
    // DocumentApp.getUi().alert('No text was found that required formatting.'); 
    } else { 
    var style = {}; 
    style[DocumentApp.Attribute.BOLD] = true; 
    search. 
    search.getElement().setAttributes(style); 
// body.replaceText('\*\*',''); 
    // DocumentApp.getUi().alert('Formatting completed!'); 
    } 
} 
+0

奇怪的是,該模式應該只返回一個。也許一個單獨的.findText函數可能是合適的?例如: 'var one = body.findText('\ *'); var two = body.findText('\ *',one); var content = body.findText('。* \ *',two); // [無論粗體代碼是否合適]; body.replaceText('\ * \ *','');' 當然,這將依賴於第一個正則表達式按預期工作(不太可能),並且只會拾取第一個實例, '.replaceText'正在全身工作。 – user2957638