У меня есть много файлов с синтаксисом кортежа, которые я хочу переписать, чтобы перейти на последнюю версию сборника рассказов. Файлы выглядят так:
['AcknowledgementsSection', () => <AcknowledgementsSection />],
['AuthorizedUserSection', () => <AuthorizedUserSectionWithStore />],
['AuthorizedUserAlert', () => <AuthorizedUserAlert />],
Я хочу выполнить глобальный поиск и замену в VS Code, чтобы результат выглядел так:
export const acknowledgementsSection = () => <AcknowledgementsSection />;
export const authorizedSection = () => <AuthorizedSectionWithStore />;
export const authorizedAlert = () => <AuthorizedAlert />;
Вот что я пытаюсь до сих пор:
\[('.*'), \(\) => (.*),
Как я могу использовать это в коде VS, чтобы правильно все заменить?
Обновить сообщение о принятом ответе
Крайний случай у меня есть
['Decline Modal', () => <DeclineModal />],
и нужно объединить группу захвата
export const declineModal = () => <DeclineModal />;
Один из вариантов — сделать соответствие немного более конкретным, а затем использовать \l
перед первой группой захвата в замене.
Поиск
\['([^']*)', (\(\) => <[^<>]*>)\],
Демонстрация регулярных выражений
Заменять
export const \l$1 $2;
Шаблон соответствует
\['
Матч ['
([^']*)
Захватите в группе 1 любой символ, кроме '
или новой строки',
Сопоставьте запятую и пробел(
Группа захвата 2
\(\) => <[^<>]*>
Совпадение () =>
с последующим сопоставлением от <
до >
)
Закрыть группу 2\],
Матч ],
@WiktorStribiżew Спасибо, я этого не знал :-)
спасибо вам обоим за помощь. Я обновил вопрос, так как нашел пограничный случай и не знаю, как с этим справиться. Первоначальный вопрос был дан ответ и принят.
@TomTomSamSam Здесь вам нужен шаг предварительной обработки, если количество пробелов является переменным значением. Тем не менее, вы можете использовать пару необязательных групп в текущем решении (если вы знаете, что может быть до X и больше никаких вхождений этих пробелов).
Если у вас есть, например, 1 или 2 слова, вы можете найти \['(\w+)(?: (\w+))?', (\(\) => <[^<>]*>)\],
и заменить export const \l$1$2 $3;
Посмотреть совпадения здесь regex101.com/r/GWo0u3/1
Просто забавный факт: в VS Code вам не нужно
\r\n
в классе отрицательных символов.[^']
не соответствует символам разрыва строки.\['([^']*)', (\(\) => <[^<>]*>)\],
должен сделать.