RegEx Возврат найден Group IF String НЕ начинается с '- VSCode - Поиск / Замена - PullRequest
0 голосов
/ 21 июня 2019

Итак, я выполнил глобальный поиск и замену RegEx.Я забыл включить ' в замену.Теперь мне нужно выполнить поиск по строкам, которые соответствуют ниже.Он не должен начинаться с ' и будет иметь | translate в конце.Это ключи углового перевода - они могут быть в файле шаблона (HTML).Они всегда начинаются с {{, есть |перевести и закончить}}.Теперь у кикера есть проблемы с интервалом или разрывом строки (менее вероятно, но есть шанс).Так что это может быть {{_ _ textToKeepAdd'To _ _ |_ _ translate _ _}} _ _ - пробелы или возможность разрыва строки.

Соответствующие строки (без начала):

anyText' | translate

<other text or tags>{{ anyText' | translate

{{  // line break
anyText' | translate

anyText'
 | translate // line break

Соответствующие строки:

'anyText' | translate

 <other text or tags>{{ 'anyText' | translate

'anyText'
 | translate

Формат возвращаемой строки:

'anyText' | translate

Пример:

blahadskfjlksjdf' | translate = 'blahadskfjlksjdf' | translate

'SkipMe' | translate = not found for replacement bc it starts with a '.

And <other text or tags>{{ anyText' | translate =  <other text or tags>{{ 'anyText' | translate

Вот код, который я выбрал - '(?:\w+\.){1,3}(?=\w+'\s+\|\s+translate\b)

Японадобится группа захвата / возвращения на замену.

Ответы [ 2 ]

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

Я предлагаю использовать

Найти что : \{\{[\s\n]*(?!['\s\n])(.*')[\s\n]*(\|[\s\n]+translate)\b
Заменить на : {{ '$1 $2

См. демо-версию регулярного выражения (изменено, чтобы отразить, как это работает в VSCode).

enter image description here

Детали

  • ^ - начало строки
  • \{\{ - {{ подстрока
  • [\s\n]* - 0+ пробелов / разрывов строк
  • (?!['\s\n]) - отрицательный взгляд в случае неудачи, если непосредственно справа от текущего местоположения есть ' или пробел (включая разрыв строки)
  • (.*') - Группа захвата 1: любые 0+ символов, кроме символов разрыва строки, как можно больше, а затем ' char
  • [\s\n]* - 0+ пробелов / разрывов строк
  • (\|[\s\n]+translate)\b - Группа 2: |, 1+ пробелы / переносы строк и целое слово translate.

Замена: ', обратная ссылка группы 1 (относится к значению, полученному в группе 1), пробел и обратная ссылка группы 2 (относится к значению, полученному в группе 2).

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

Это должно сработать:

Заменить \{\{(?:\s|\n)*(?!(?:'|\s|\n))(.*')(?:\s|\n)*(\|(?:\s|\n)+translate)\b

с {{ '$1 $2

Regex 101 Демо

Пояснение:

  • \{\{ - сопоставить две открытые скобки

  • (?:\s|\n)* - соответствует любому количеству пробельных символов

  • (?!(?:'|\s|\n))(.*') - группа захвата 1; соответствует любой непрерывной строке не ' символов, за которой следует один '

  • (?:\s|\n)* - соответствует любому количеству пробельных символов

  • (\|(?:\s|\n)+translate) - группа захвата 2; соответствует |, за которым следует хотя бы один или несколько пробельных символов, а затем слово translate.

  • \b - соответствует границе слова

...