1

저는 VS 코드의 문법 확장 기능을 사용하고 있습니다. 정규식 패턴의 배후에 문제가 있습니다. 다음 문자열을 감안할 때, 나는 그것이 @fmt (Regex는 VS 코드에서 뒤떨어져 있습니까?

@fmt(cmp,foo) 

내가 다른 편집기에서 사용되는 일치하는 문자열이 있었다 앞에있어 경우에만 CMP을 반환하려면 : 그러나

(?<=[@|©](fmt)\()(\w+) 

을, 이 VS 코드에서 작동하지 않습니다, 정규 표현식을 검색 할 때 그것은 유효한식이 아닌 오류와 함께 제공됩니다. 그걸로 놀고, 문제는 < = 문자, 뒤를 나타냅니다.

VS 코드 웹 사이트를 검색해도 정규식 참조 가이드가 제공되지 않습니다. 스택 오버플로 검색은 this question으로 시작되었습니다. Visual Studio에는 고유 한 정규식 정의가 있습니다. 불행히도, 그 질문에 주어진 예제는 VS 코드에서 작동하지 않습니다.

누구든지 VS 코드에서 정규식 뒤에 보이는 방법을 알고 있습니까? 또는 적어도 VS 코드에 대한 정규식 설명서의 위치를 ​​알고 있습니까?

Stack Overflow reference에 따르면 JavaScript에서는 뒷 배경이 지원되지 않으므로 걱정할 필요가 없습니다. JavaScript 기능에서 look behinds를 모방하는 방법을 보여주는 another question이 있지만 사용자 정의 함수를 사용하여 VS 코드에서 언어를 확장 할 수 있는지는 알 수 없습니다. 누구든지 그 방법을 알고 있고 그 방향으로 나를 가리킬 수 있다면, 그것은 또한 가능한 해결 방법이 될 것입니다.

+0

당신이 전혀 lookbehind 필요한 이유는 무엇입니까? '([@ ©] fmt \() (\ w +)'를 사용하고'$ 1'과'$ 2'의 역 참조를 통해 캡쳐 된 값으로 필요한 것을하십시오 VSC는 lookbehind를 지원하지 않습니다. 고지 ". –

+0

토마스, 뭐하고 있니?'@fmt (cmp, foo)'로해야 할 일을 설명해 주시겠습니까? 최종 결과는 무엇입니까? 찾기 및 강조 표시? 그러면 둘러보기가 전혀 필요하지 않습니다. –

+0

구문 강조를 위해 ** ** @ fmt **를 단색 (함수)으로, ** cmp **를 – thomasjbarrett

답변

0

VS 코드에서 두 가지 모두를 살펴보세요. 기존 언어 플러그인 중 일부를 다운로드하고 규칙을 살펴본 후 이것이 어떻게 공식화되어야하는지 알아보십시오. 다음은 내 ANTLR 문법 확장의 일부입니다.

{ 
    "name": "meta.rule.parser.antlr", 
    "begin": "[[:lower:]][[:alnum:]_]*(?=.*?:)", 
    "beginCaptures": { 
    "0": { "name": "entity.name.function.parser.antlr" } 
    }, 
    "end": "(?<=;)", 
    "patterns": [ 
    { 
     "name": "variable.other", 
     "match": "\\[.*?\\]" 
    }, 
    { 
     "name": "keyword.other.antlr", 
     "match": "\\b(returns|locals)\\b" 
    }, 
    { 
     "name": "keyword.other.antlr", 
     "match": "@\\w+" 
    }, 
    { 
     "name": "entity.other.rule.option", 
     "match":" <.*?>" 
    }, 
    { 
     "name": "variable.other.antlr", 
     "match": "\\w+\\s*=" 
    }, 
    { 
     "name": "entity.name.tag.antlr", 
     "match": "#.*" 
    }, 

    { "include": "#comments" }, 
    { "include": "#strings" }, 
    { "include": "#lexer-rule-reference" }, 
    { "include": "#parser-rule-reference" }, 
    { "include": "#predicate" }, 
    { "include": "#action" }, 
    { "include": "#wildcard-regexp" }, 
    { "include": "#regexp-parts" }, 
    { "include": "#options-list" } 

    ] 
} 

최종 일치는 룩백 패턴을 사용합니다. 또한 패턴을 중첩 할 수 있습니다. 예를 들어 더 큰 구조 (예 : 전체 함수)에 대한 시작/종료를 정의한 다음 하위 패턴과 일치시키고 개별 스타일을 할당 할 수 있습니다. 이것은 왜 당신이 특정 코드 블록에 있다는 것을 알고 있기 때문에 앞뒤로 보지 않아도되는 이유입니다.

위 패턴의 경우 : (\w+) 부분이 둘러보기 패턴의 일부로되어 있습니까? 그렇다면 마지막 닫는 괄호 앞에 와야합니다.

+0

'(? <=)'구문을 시도했지만 여전히 유효하지 않은 정규식/잘못된 그룹 오류가 발생했습니다. VS 코드가 역 참조를 지원하지 않는 것 같습니다 : https://github.com/Microsoft/vscode/issues/8635 – Adam

0

Visual Studio 코드는 룩어 배후 (https://github.com/Microsoft/vscode/issues/8635)를 지원하지 않는 ECMAScript 5에 지정된 JavaScript의 정규 표현식을 사용합니다.교체

(lookbehind_expression_)text_to_replace

표현 :

검색 식 :

$1replacement_text

을 여기

는 (감사 cyborgx37) 당신이 발견을하고 있다면 시도하고 대체 할 수있는 해결 방법입니다

주어진 입력 :

lookbehind_expression_text_to_replace

출력은 다음과 같습니다

lookbehind_expression_replacement_text

관련 문제