문제

나는 최근을 만드는 꽤 몇 가지고 3 플러그인/조각/등이 있습니다.반복적인 작업을 자동화.현재 중 하나 내가 붙어에서 사용하는 regex 에 조각을 기본 골격에 대한 새로운 기능.

이상적으로,나는 것 같은 코드를 생성과 유사한 무언가:

// Multiple Args (one arg would obviously look like (..." + "a: " + a + ")");)
function Foo(a, b, c)
{
    Log.AppendFolder("Foo(" + "a: " + a + ", b: " + b + ", c: " + c + ")");
        //body
    Log.PopLogFolder();
}
// Zero Args
function Foo()
{
    Log.AppendFolder("Foo()");
        //body
    Log.PopLogFolder();
}    

지금까지,그것을 얻을 수 있으로 포맷된 1 인수 또는 많은 인수,지 않은 가능한 모든 콤보(zero,one,많은).

윤곽은 현재의 이야 한 그 두 번째 ${2} 와 regex:

<snippet>
<content><![CDATA[
function ${1:function_name}(${2:arguments})
{
    Log.AppendFolder("$1(" + ${2/(?#stuck here)//} + ")");
        ${3://body}
    Log.PopLogFolder();
}$0]]></content>
    <tabTrigger>fun</tabTrigger>
    <scope>source.js</scope>
    <description>Function Template</description>
</snippet>

한 Arg:

"$1(" + ${2/^([A-z0-9_-]*),?.*/"\1\: " + \1 + /}");"

많은 Args(1arg,이 표시 "a: " + a + a):

"$1(" + ${2/^([A-z0-9_-]*),?(.*)/"\1\: " + \1 + /}${2/([A-z0-9_-]*)(?:, *([A-z0-9_-]*))/"$2\: " + $2 + /g}");"

방법 중 하나로 근무했다 추가 + "" + 거기에서 나를 피하십시오:

${2/([A-z_0-9]+)((?:, ?)?)/"\1\: " + \1 + "\2" + /g}

나 조건 look-ahead 반에 쉼표로,그러나는 엉망이>1arg,아마의 부족으로 인해 그들의 이해:

${2/(?(?!,)^([A-z0-9_-]*)$|([A-z0-9_-]*), *)/"\1\: " + \1/g}

나는 쉽게 할 수 있 이를 통해 정상적인 플러그인(이것은 쉬운 프로그래밍 방식),하지만 이 남아 있을 수 있는 조각/코드를 완료할 수 있기 때문에 그냥 무시 JS"재미"코드의 완성입니다.

나는 무엇을 놓치고 이를 달성하고(또는 그것은 단순히 잘못된 애비뉴-는 경우에,나는 아직도 알고 싶 대한 더 많은 정보 regex)?

도움이 되었습니까?

해결책

마지막으로 파악이 있는 조건부 교체 옵션:

?n:then:else

그래서 최종 포맷처럼 보인:

<snippet>
    <content><![CDATA[
function ${1:function_name}(${2:args})
{
    Log.AppendFolder("$1(${2/.+/" + /}${2/([A-z_0-9-]+) *(,)? */"$1\: " + $1 ?2: + "$2 " + :+ /g}${2/.+/"/})");
       ${3:// body...}
    Log.PopLogFolder();
}$0]]></content>
    <tabTrigger>fun</tabTrigger>
    <scope>source.js</scope>
    <description>Function</description>
</snippet>

는 원하는 결과를 줄 것이다:

function function_name()
{
    Log.AppendFolder("function_name()");
       // body...
    Log.PopLogFolder();
}

function function_name(a)
{
    Log.AppendFolder("function_name(" + "a: " + a + ")");
       // body...
    Log.PopLogFolder();
}

function function_name(a, b)
{
    Log.AppendFolder("function_name(" + "a: " + a  + ", " + "b: " + b + ")");
       // body...
    Log.PopLogFolder();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top