VSCode регулярное выражение найти и заменить математику?

211
%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

Я использую эту команду регулярного поиска и замены в vim, чтобы вычесть константу из каждого соответствующего идентификатора.

Я могу найти регулярное выражение в VSCode, но как я могу ссылаться submatchна математические и заменить? submatch(1)не работает в VSCode?

Спасибо.

Rakka Rage
источник

Ответы:

352

При наличии регулярного выражения (foobar)вы можете ссылаться на первую группу, используя $1и так далее, если у вас есть больше групп в поле ввода замены.

Бенджамин Пасеро
источник
еще раз спросил здесь: stackoverflow.com/questions/35283300/…
Rakka Rage
5
Я должен был заменить <p>(.*)</p>с <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>для файла в 2000 линии. Представь, что я делаю это вручную.
Бишвис Мишра
102

Чтобы дополнить ответ Бенджамина примером:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

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

Шон Луттин
источник
Это напомнило мне, что я должен избегать скобок, если я делаю регулярное выражение в операторе if.
Заводной
67

Просто чтобы добавить еще один пример:

Я заменял src attr в тегах img html, но мне нужно было заменить только src и оставить любой текст между объявлением img и атрибутом src.

Я использовал инструмент find + replace (ctrl + h), как на картинке: Найти и заменить

Диого Пачоал
источник
9
для меня это работает противоречиво - хотя выбор вилки правильный, вывод иногда остается $1без замены
godblessstrawberry
1
Привет, @godblessstrawberry, можешь поделиться строками поиска и замены?
Диого Пачоал
2
привет @Diogo Я пытался заменить projectwide \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"с myTranslate="$1"и пропускал ключи случайным образом и вставка $ 1 вместо значения группы иногда. обновление до 1.28.0 решило эту проблему
godblessstrawberry
Я столкнулся с той же проблемой, что и @godblessstrawberry, выполняя глобальную замену для всех моих файлов с помощью регулярного выражения '(и | или \ + | \ -) ​​\ n (*)' и строки замены '\ n $ 2 $ 1', иногда правильно сдвинул бинарный оператор в начало новой строки, но в других случаях просто вставил $ 2 $ 1. Казалось бы, ошибка в VSCodium
Tom Close
@godblessstrawberry, проверьте это: github.com/microsoft/vscode/issues/81825 . Если это не относится к вам, предоставьте больше информации и откройте проблему там.
Диого Пащоаль
10

В моем случае $ 1 не работал, но $ 0 отлично работает для моей цели.

В этом случае я пытался заменить строки в правильном формате, чтобы перевести их в Laravel, я надеюсь, что это может быть полезно для кого-то еще, потому что мне потребовалось время, чтобы разобраться с этим!

Search: (?<=<div>).*?(?=</div>)
Replace: {{ __('$0') }}

Regex Replace String для перевода Laravel

Ares9323
источник
1
Возможно ли это, чтобы вы скопировали свое сообщение и скопировали код вместо изображения? Это было бы лучше для визуализации.
Панквуд
3

Для новичков принятый ответ является правильным, но немного лаконичным, если вы не знакомы ни с VSC, ни с Regex.

Так что, если это ваш первый контакт с:

Чтобы найти и изменить текст,

  1. На шаге «Найти» вы можете использовать регулярные выражения с «группами захвата», например I want to find (group1) and (group2), с помощью скобок. Будет найден тот же текст I want to find group1 and group2, но с той разницей, на которую вы сможете сослаться, group1и group2на следующем шаге:

  2. На шаге «Заменить» вы можете обратиться к группам захвата через $1и $2т. Д., Чтобы вы могли изменить предложение на I found $1 and $2 having a picnic, которое будет выводитьI found group1 and group2 having a picnic.

Ноты:

  • Вместо простой строки все, что находится внутри или снаружи, ()может быть регулярным выражением.

  • $0 относится ко всему матчу

Tedskovsky
источник
2

Еще один простой пример:

Search: style="(.+?)"
Replace: css={css`$1`}

Полезно для преобразования HTML в JSX с Emotion / CSS!

Хедли смит
источник