Вернуть слово в расширении visual-studio-code - PullRequest
0 голосов
/ 04 ноября 2019

Я делаю расширение в visual-studio-code, в машинописном тексте. И мне нужно вернуть слово (в сочетании с точками и дефисами) после префикса '{{>' .

{{>word-test }}
{{> word-test}}
{{> word-test }}
{{> word-test class="class_name"}}
// returns 'word-test'

// On this one the regex doesn't seem to work
{{> word-test 
    class="class_name"
}}
// returns all the text in the file

{{> word-test.test }}
// returns 'word-test.test'

Чтобы получить слова, я использую 'getWordRangeAtPosition ' встроенный в Visual-Studio-код с регулярным выражением в параметре.

Проблема

Я пробовал несколько комбинаций регулярных выражений, но когда есть разрыв строкиЯ никогда не получал «тест по словам» в коде visual-studio. Вместо этого я получаю весь текст в файле.

Вот самая последняя комбинация регулярных выражений, которую я пробовал:

/(?<={{>[ \s]{0,1})(.*?)(?=[\n\s\}\}])/

Она отлично работает в тестере регулярных выражений, но не в визуальном. сам код студии.

см. тестер регулярных выражений: https://regexr.com/4o4d8

1 Ответ

0 голосов
/ 07 ноября 2019

Вместо сложного RegEx, вы можете написать логику в своем коде расширения?

Вы можете найти слово в позиции, затем получить начальный текст из той же строки в документе и проверить, чтоначальный текст заканчивается на {{>:

let wordRange = document.getWordRangeAtPosition(position, /\w[-\w\.]*/g);
let leadingText = document.getText(new Range(wordRange.start.with({ character: 0 }), wordRange.start));
let hasCorrectPrefix = leadingText.match(/{{>\s?$/);

Аналогично вы можете сравнить суффикс, если он действительно необходим для функциональности.

...