Vs Code Perform Regex при захвате результатов группы - PullRequest
0 голосов
/ 06 марта 2020

У меня есть образец строки:

registerForm.main.myApplicant = value

Мне нужно заменить это на:

registerForm.main.getMyApplicant() = value

Регулярное выражение, которое я придумал:

\w+\.\w+\.(\w)(\w+)

Где $1 равно m, которое необходимо преобразовать в верхний регистр. И $2 равняется остальной части слова, к которому необходимо добавить * 1013. *

Когда я это сделаю:

FIND:    \w+\.\w+\.(\w)(\w+)
REPLACE: get\u$1$2()

Он просто печатает \ u вместо того, чтобы делать его заглавными. Как я могу выполнить регулярное выражение для группы захвата $1?

Я также попробовал $1=\u$1

Вот демо regexr

Ответы [ 3 ]

1 голос
/ 06 марта 2020

Вы можете использовать двухшаговый подход, который можно использовать в глобальном поиске файлов и заменить.

Я изменю шаблон группы (\w) на ([a-z]), потому что нам нужно только сопоставить те строки, которые иметь строчную букву в этой группе.

Шаг 1 : Найти что : \w+\.\w+\.([a-z])(\w+) Заменить на : get###ABCDEFGHIJKLMNOPQRSTUVWXYZ$1$2()

, где ### - это фальшивый якорный текст, который поможет вам идентифицировать текст, которым нужно манипулировать на втором шаге. В настоящее время текст будет выглядеть следующим образом:

get###ABCDEFGHIJKLMNOPQRSTUVWXYZmyApplicant() = value
get###ABCDEFGHIJKLMNOPQRSTUVWXYZnewValue() = value
get###ABCDEFGHIJKLMNOPQRSTUVWXYZxyzApplicant() = value

Шаг 2 : Найти что : ###(?:(A)BCDEFGHIJKLMNOPQRSTUVWXYZa|A(B)CDEFGHIJKLMNOPQRSTUVWXYZb|AB(C)DEFGHIJKLMNOPQRSTUVWXYZc|ABC(D)EFGHIJKLMNOPQRSTUVWXYZd|ABCD(E)FGHIJKLMNOPQRSTUVWXYZe|ABCDE(F)GHIJKLMNOPQRSTUVWXYZf|ABCDEF(G)HIJKLMNOPQRSTUVWXYZg|ABCDEFG(H)IJKLMNOPQRSTUVWXYZh|ABCDEFGH(I)JKLMNOPQRSTUVWXYZi|ABCDEFGHI(J)KLMNOPQRSTUVWXYZj|ABCDEFGHIJ(K)LMNOPQRSTUVWXYZk|ABCDEFGHIJK(L)MNOPQRSTUVWXYZl|ABCDEFGHIJKL(M)NOPQRSTUVWXYZm|ABCDEFGHIJKLM(N)OPQRSTUVWXYZn|ABCDEFGHIJKLMN(O)PQRSTUVWXYZo|ABCDEFGHIJKLMNO(P)QRSTUVWXYZp|ABCDEFGHIJKLMNOP(Q)RSTUVWXYZq|ABCDEFGHIJKLMNOPQ(R)STUVWXYZr|ABCDEFGHIJKLMNOPQR(S)TUVWXYZs|ABCDEFGHIJKLMNOPQRS(T)UVWXYZt|ABCDEFGHIJKLMNOPQRST(U)VWXYZu|ABCDEFGHIJKLMNOPQRSTU(V)WXYZv|ABCDEFGHIJKLMNOPQRSTUV(W)XYZw|ABCDEFGHIJKLMNOPQRSTUVW(X)YZx|ABCDEFGHIJKLMNOPQRSTUVWX(Y)Zy|ABCDEFGHIJKLMNOPQRSTUVWXY(Z)z) Заменить на : $1$2$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$18$19$20$21$22$23$24$25$26

Теперь результат будет окончательным:

getMyApplicant() = value
getNewValue() = value
getXyzApplicant() = value
1 голос
/ 06 марта 2020

Просто установите фрагмент для замены. Почему? Потому что фрагменты могут преобразовывать в верхний и нижний регистр и легко вводить группы заглавных букв. Кроме того, хотя вам это здесь не нужно, они также могут выполнять условные замены, которые могут оказаться чрезвычайно полезными для вас в будущем.

Вот простой фрагмент:

{
  "key": "shift+alt+y",                          // whatever keybinding you choose
  "command":  "editor.action.insertSnippet",
  "args": {

        // see how simple this regex can be after you have found and selected your matches
    "snippet": "${TM_SELECTED_TEXT/(.*\\.)(.*)/$1get${2:/capitalize}()/g}"

  },
  "when": "editorTextFocus && editorHasSelection"
},

Вы еще нужно найти то, что вы хотите изменить, вы можете использовать свое оригинальное регулярное выражение, если хотите

\w+\.\w+\.(\w)(\w+)

Я предлагаю (.+\.)([^\.\s]+)(?!.*\.) см. https://regex101.com/r/NbXgs3/2 это обрабатывает несколько крайних случаев.

И позволяет вам иметь более глубокие структуры , такие как registerForm.main.subMain.myApplicant, et c. до любого числа или менее , например registerForm.myApplicant.

  • Шаг 1. Введите свое регулярное выражение в виджет «Поиск».
  • Шаг 2: Alt + Введите , чтобы выбрать все совпадения для поиска.
  • Шаг 3. Запустите ваш фрагмент выше, здесь Shift + Alt + Y

Довольно просто. А затем просто сохраните фрагмент как как скелет , чтобы использовать его для последующего поиска / замены регистром или условными преобразованиями. Обычно внутреннее регулярное выражение - внутри фрагмента, здесь (.*\\.)(.*) - относительно просто, так как оно действует только на предварительно выбранные вами записи, и, следовательно, преобразование проще выполнить.

getFunction snippet demo

1 голос
/ 06 марта 2020

Двухшаговая возможность

1)

FIND:    \w+\.\w+\.(\w)(\w+)
REPLACE: get@@@$1$2()

2)

  • выбрать @@@
  • выбрать все: Ctrl + Shift + L
  • развернуть выделение на 1 символ: Ctrl + Shift + ArrowRight
  • использовать команду: Преобразовать в верхний регистр
  • уменьшить выбор 1 символ: Ctrl + Shift + ArrowLeft
  • удалить выбор: Удалить
  • остановить мульти-курсор: Escape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...