2016-07-27 4 views
0

私は、特定の金額をアウトデント(インデント)するために使用できる関数を作成しようとしています。特定の量のタブでどのように処理しますか?

これまで私がこれまで持っていたことは次のとおりです。これにより、行頭のすべてのタブが削除されます。私はダイナミックなパターンを作成したり、機能を使用する必要があると思うが、私はこだわっている:

var outdentPattern:RegExp = /([\t ]*)(.+)$/gm; 

function outdent(input:String, outdentAmount:String = "\t"):String { 

    var outdentedText:String = input.replace(outdentPattern, outdentAmount + "$2"); 
    return outdentedText; 
} 

ここではテストデータです。テストは、一つのタブを削除する2つのタブが削除されるだろう

 <s:BorderContainer> 
      <html:htmlOverride><![CDATA[ 
       <script> 
       var test:Boolean = true; 
       test = "string"; 
       </script>]]> 
      </html:htmlOverride> 
     </s:BorderContainer> 

、一つのタブでなど

期待される結果は次のようになります。

<s:BorderContainer> 
     <html:htmlOverride><![CDATA[ 
      <script> 
      var test:Boolean = true; 
      test = "string"; 
      </script>]]> 
     </html:htmlOverride> 
    </s:BorderContainer> 

そして、二つのタブ:

<s:BorderContainer> 
    <html:htmlOverride><![CDATA[ 
     <script> 
     var test:Boolean = true; 
     test = "string"; 
     </script>]]> 
    </html:htmlOverride> 
</s:BorderContainer> 

と内側のタブ(ホワイトスペース)ダウン崩壊と3つのタブ:

<s:BorderContainer x="110" height="160" width="240" y="52"> 
<html:htmlOverride><![CDATA[ 
    <script> 
    var test:Boolean = true; 
    </script> 
]]></html:htmlOverride> 
</s:BorderContainer> 

興味深いノート:
SOコードがすでにあるときに、コードボタンをクリックしたときにアウトデントされるのエディタインデントされた

答えて

1

あなたはテンプレートからRegExpオブジェクトを構築することができいずれか、またはあなたが正規表現を複数回使用することができます

var temp:String = '^[\t ]{0,'; 

function outdent(input:String, amount:Number = 1):String { 
    return input.replace(new RegExp(temp + amount.toString() + '}', 'gm'), ''); 
} 

または:

var pattern:RegExp = /^[\t ]/gm; 

function outdent(input:String, amount:Number = 1):String { 
    for (var i:Number = 0; i < amount; i++) 
     input = input.replace(pattern, ''); 
    return input; 
} 
+0

これが役立ちます。別の問題が明らかになった。 2番目の提案を使用して正確な量(たとえば2)を指定すると、1つのタブを含む行は無視されます。これはテストコードでは明白ではありません。 –

+0

最初の例を使用してタブを1つずつ削除すると、コードが崩壊し始めます。これは私が提供したテストコードを使用しても明らかではありません。いずれにせよ、これは質問に答えて、私はそれを受け入れるかもしれません。オプションでコードが崩壊するのを防ぐためにロジックを追加する必要があるようです。また、テストコードを更新します。 –

+1

私は最初の懸案事項に対処するためにそれを編集しました。あなたが "崩壊"することによって意味するものは確かに確かではありません。 – RamenChef

関連する問題