Первый ответ работает для одного желаемого захвата в строке, как в исходном вопросе. Но это относительно простое регулярное выражение не будет работать, если их два или более в строке.
Регулярное выражение ниже работает до 6 записей в строке, например
trans('somestring1');
stuff trans("SomeString2"); some content trans("SomeString2a");more stuff [repeat, repeat]
Но это не так. t для 7+ - для этого вам понадобится гуру регулярных выражений .
Вот снова процесс с поворотом , используя вместо этого фрагмент в редакторе поиска поиска / замены. Использование фрагмента позволяет лучше контролировать форматирование конечного результата.
(1) Откройте новый редактор поиска: Ctrl + Shift + P (Эта команда в настоящее время не связана с привязкой клавиш.)
(2) Вставьте это регулярное выражение в поле ввода поиска (с выбранной опцией регулярного выражения. *):
`((.*?)(\btrans\(['"]?)([^,'")]*)((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?)(.*)`
regex101 demo
(3) Вы получите список файлов с результатами поиска. Теперь выберите все результаты по отдельности с помощью Ctrl + Shift + L .
(4) Запустите эту привязку клавиш:
{
"key": "alt+i", // whatever keybinding you like
"command": "editor.action.insertSnippet",
"when": "editorTextFocus",
"args": {
"snippet": "${TM_SELECTED_TEXT/((.*?)(\\btrans\\([\\'\\\"]?)([^,\\'\\\")]*)((.*?)(\\btrans\\([\\'\\\"]?)([^,\\'\\\")]*))?((.*?)(\\btrans\\([\\'\\\"]?)([^,\\'\\\")]*))?((.*?)(\\btrans\\([\\'\\\"]?)([^,\\'\\\")]*))?((.*?)(\\btrans\\([\\'\\\"]?)([^,\\'\\\")]*))?((.*?)(\\btrans\\([\\'\\\"]?)([^,\\'\\\")]*))?)(.*)/$4${8:+\n }$8${12:+\n }$12${16:+\n }$16${20:+\n }$20${24:+\n }$24/g}"
}
},
Этот фрагмент будет применяться к каждому выбору в вашем результате поиска. Эта часть ${8:+\n }
является условным условием, которое добавляет новую строку и некоторые пробелы, если есть группа захвата 8 - которая будет второй trans(...)
в строке.
Демо: (к сожалению, это не правильно показать Ctrl + Shift + L , выбирая все строки по отдельности или триггер фрагмента Alt + i )