如何通过特定数量的标签突出?

时间:2016-07-27 00:20:23

标签: regex actionscript-3

我正在尝试创建一个可以用来突出(而不是缩进)特定数量的函数。

这是我到目前为止所拥有的。这将删除行开头的所有选项卡。我想我需要创建一个动态模式或使用一个函数,但我被卡住了:

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

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

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

这是测试数据:

        <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>

内部标签(空白)的三个标签向下折叠:

<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 个答案:

答案 0 :(得分: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;
}