Как использовать регулярное выражение для поиска и замены нового синтаксиса rxjs?

#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: любые нулевые или более символов, как можно меньше, вплоть до }) подстроки
  • ;$ ; символ в конце строки.