VSCode Поиск Заменить RegEx - PullRequest
1 голос
/ 21 июня 2019

Я отправляю файл углового перевода, и мне нужно выполнить поиск замены в VScode на ключе перевода. Мне нужно обрезать все, что находится перед последним ключом, и вернуть его на замену. Ключи будут иметь максимум 3 уровня. Слова ниже key and keepThisInReplace являются произвольными и будут разными словами. Примеры ниже.

Параметры строки поиска:

'key1.keepThisInReplace1' | translate
'key1.key2.keepThisInReplace2' | translate
'key1.key2.key3.keepThisInReplace3' | translate
'anyWord.AndLevelAmount.UpTo3AtLeast.anyWordToKeep' | translate

Не найти в поиске:

'../../assets/images/
'./../assets/images/
'.......
'path').join
'staging.site
etc...

Выше следует заменить следующим образом:

'keepThisInReplace1' | translate
'keepThisInReplace2' | translate
'keepThisInReplace3' | translate
'anyWordToKeep' | translate

То, что я пытаюсь, не работает - похоже на '\ w [^.] . \ w *. * \ W *. буду работать. будет почти работать - подхватывает «путь»). join и «staging.site still.

Ключи выше всех имеют {{ перед ними. Но если я заблокирую {{, тогда я должен вернуть его в замену. Пример = {{ key1.key2.keeptext | translate }} = {{ keeptext | translate }}

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы можете использовать группу без захвата с квантификатором, который повторяет 1-3 слова и более 1 слова, за которыми следует точка, и убедитесь, что многострочная связь включена с помощью якорей ^$.

При замене используйте '

^'(?:\w+\.){1,3}(?=\w+'\s+\|\s+translate$)

Если строка может быть где-нибудь в файле, вы можете опустить якоря и использовать границу слова \b после перевода.

'(?:\w+\.){1,3}(?=\w+'\s+\|\s+translate\b)

Пояснение

  • ^ Начало строки
  • (?:\w+\.){1,3} Повторить 1 - 3 раза, сопоставляя 1+ слов символов иточка
  • (?= Позитивный взгляд вперед, утверждают, что прямо справа есть
    • \w+'\s+ Совпадение с 1 + символами слова, ' и 1+ символами пробела
    • \| Совпадение |
    • \s+translate$ Совпадение 1+ пробельных символов, translate и конец строки подтверждения
  • ) Закрыть положительный прогноз

Regex demo

Другой вариант вместо позитивного просмотра - использование 2 групп захвата.

В замене используйте группу 1 и группу 2$1$2

^(')(?:\w+\.){1,3}(\w+'\s+\|\s+translate$)

Regex demo

0 голосов
/ 21 июня 2019

'.*\. до ' должно быть все, что вам нужно. Это заменит все строки, которые соответствуют галочке, за которой следует любое количество символов и затем точка.

если вы хотите быть более конкретным, вы можете использовать это

'\w*\.*\w*\.*\w*\.

это будет соответствовать до 3 точек со словами между ними.

Проверьте демо здесь: https://regexr.com/4g652

EDIT

Я попытался сделать это более конкретным, и вот что я придумал:

'.+\.(?=\w*'\s*\|\s*translate)

При этом используется предпросмотр, чтобы убедиться, что за соответствующей строкой следует слово, а затем ' | translate. Как вы думаете, это достаточно конкретно?

Демо: https://regexr.com/4g66i

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...