2016-06-12 4 views
1

以下は、部分的なテキスト要素を強調するGoogleの例です。これは、要素全体ではない選択されたテキスト(たとえば、文章断片のみが選択されている)に使用されます。私は代替えのアクションを正規表現の置き換えのアクションに置き換える必要があります。 replaceText()関数では、開始位置と終了位置を整数で指定することはできません(setBold()関数とは異なります)。Google Appsスクリプトの部分テキスト要素内の正規表現置換

Thisの質問は非常によく似ていますが、私はGoogle Scriptsがいくつかのコマンドを変更したと思いますので、再度投稿する価値はあると思いました。

、Googleの例は次のとおりです。replaceTextメソッドの正規表現の実装は、それが不可能なことで、このような部分的な交換を行うことが可能となるれ、前後参照またはキャプチャグループをサポートしていません

// Bold all selected text. 
var selection = DocumentApp.getActiveDocument().getSelection(); 
if (selection) { 
    var elements = selection.getRangeElements(); 
    for (var i = 0; i < elements.length; i++) { 
    var element = elements[i]; 

    // Only modify elements that can be edited as text; skip images and other non-text elements. 
    if (element.getElement().editAsText) { 
     var text = element.getElement().editAsText(); 

     // Bold the selected part of the element, or the full element if it's completely selected. 
     if (element.isPartial()) { 
     text.setBold(element.getStartOffset(), element.getEndOffsetInclusive(), true); 
     } else { 
     text.setBold(true); 
     } 
    } 
    } 
} 

答えて

0

回避策は、JavaScript置換を使用して新しい部分文字列を準備し、replaceTextを使用してそれを配置することです。たとえイタリック体の部分が置換が起こる選択肢と重なっていても、テキストの書式が保持されます。潜在的な欠点は、要素に選択と同じテキストが含まれている場合、そこにも置き換えが行われることです。

var text = element.getElement().editAsText(); 
if (element.isPartial()) { 
    var start = element.getStartOffset(); 
    var finish = element.getEndOffsetInclusive() + 1; 
    var oldText = text.getText().slice(start, finish); 
    var newText = oldText.replace(/a/g, "b"); 
    text.replaceText(oldText, newText); 
} 
+0

これは素晴らしい解決策です。残念ながら、それは私がそれを必要とする(言及されていない)ために失敗します。 'getText'で保存されていないので、' replaceText'関数で見つからないので、選択に改行があると失敗します。だからイライラする! –

+0

最後の 'replaceText'を' text.deleteText(start、finish);に置き換え、 'text.insertText(start、newText);をつけると、あなたの答えは完全に動作します。 –