#regex #visual-studio-code #rxjs #find-replace
#регулярное выражение #visual-studio-code #rxjs #найти-заменить
Вопрос:
Я хочу обновить свой код rxjs до нового синтаксиса. для этого я использую vscode и «найти и заменить» регулярным выражением.
старый синтаксис:
.pipe(
catchError((err) => {
...
})
)
.subscribe((res) => {
...
});
новый синтаксис:
.subscribe({ next: (res) => { ... }, error: (err) => { ... });
Я пытаюсь использовать это созданное мной регулярное выражение, но мне кажется, что регулярное выражение неверно, и я не уверен, почему, потому что в этом регулярном выражении я нахожу то, что между catchError
и subscribe
. Итак, как заставить его работать правильно?
.pipe(sScatchError(.*).subscribe(.*)
Также как я могу заменить везде, где я сопоставляю этот шаблон с новым шаблоном?
regex101.com
Комментарии:
1. Вы уверены, что первая часть может быть заменена второй частью во всей вашей кодовой базе, не вызывая ошибок? Рассмотрим случай, когда поток возвращается,
catchError
иnext
обратныйsubscribe
вызов должен обрабатывать значения из этого потока. Очевидно, что ошибки в вашем старом синтаксисе будут выполнять код в обоихcatchError
иsubscribe-next
, тогда как в вашем новом синтаксисеsubscribe-error
будет выполняться только часть. Таким образом, вы не могли просто заменить первое на второе, не касаясь кода в каждом случае.2. У меня много файлов с одинаковым шаблоном
.pipe...catchError...subscribe
. Я хочу делать только с этими шаблонами. но только может бытьn
и пробел между ними.3. Попробуйте
^.pipe(ns*catchError([wW]*?}))n[wW]*?.subscribe([wW]*?}));$
( демо ). Или немного более безопасная версия .4. прохладный. в чем разница между ними?
5. Первый содержит
[wW]*?
в середине, который потенциально может совпадать с несколькими.pipe
s.
Ответ №1:
Вы можете использовать
^.pipe(ns*catchError([wW]*?}))ns*)s*.subscribe([wW]*?}));$
Смотрите демонстрацию регулярных выражений.
Подробные сведения:
^
— начало строки.pipe(
— буквальный.pipe(
текстn
— разрыв строкиs*
— 0 пробеловcatchError
— буквальное слово([wW]*?}))
— Группа 1: любые нулевые или более символов, как можно меньше, вплоть до})
подстрокиns*
— разрыв строки и 0 пробелов)
—)
символs*
— 0 пробелов.subscribe
— литеральная.subscribe
строка([wW]*?}))
— Группа 2: любые нулевые или более символов, как можно меньше, вплоть до})
подстроки;$
—;
символ в конце строки.