如何使用正则表达式查找和替换新的 rxjs 语法?

How to use regex to find and replace for new rxjs syntax?

我想将我的 rxjs 代码升级到新语法。为此,我使用 vscode 并通过正则表达式“查找并替换”。

旧语法:

.pipe(
 catchError((err) => {
   ...
 })
 )
 .subscribe((res) => {
   ...
 });

新语法是:

 .subscribe({ next: (res) => { ... }, error: (err) => { ... });

我尝试使用我构建的这个正则表达式,但我似乎正则表达式是错误的并且不确定为什么,因为在该正则表达式中我找到了 catchErrorsubscribe 之间的内容。那么如何让它以正确的方式工作呢?

\.pipe(\s\ScatchError(.*).subscribe(.*)

另外,我怎样才能将匹配此模式的所有地方替换为新模式? regex101.com

你可以使用

^\.pipe\(\n\s*catchError([\w\W]*?\}\))\n\s*\)\s*\.subscribe([\w\W]*?\}\));$

参见regex demo

详情:

  • ^ - 行首
  • \.pipe\( - 文字 .pipe( 文本
  • \n - 一个换行符
  • \s* - 0+ 个空格
  • catchError - 字面意思
  • ([\w\W]*?\}\)) - 第 1 组:任何零个或多个字符,尽可能少,直到并包括 }) 子字符串
  • \n\s* - 换行符和 0+ 个空格
  • \) - 一个 ) 字符
  • \s* - 0+ 个空格
  • \.subscribe - 文字 .subscribe 字符串
  • ([\w\W]*?\}\)) - 第 2 组:任何零个或多个字符,尽可能少,直到并包括 }) 子字符串
  • ;$ - 行尾的 ; 个字符。