Javascript 将ES模块导入更改为直接导入的正则表达式匹配
我有一个组件库包,它在很多文件中使用,如:Javascript 将ES模块导入更改为直接导入的正则表达式匹配,javascript,regex,visual-studio-code,regex-group,regexp-replace,Javascript,Regex,Visual Studio Code,Regex Group,Regexp Replace,我有一个组件库包,它在很多文件中使用,如: import { Grid, Heading, Button } from 'component-library' import { Grid } from 'component-library/lib/Grid' import { Heading } from 'component-library/lib/Heading' import { Button } from 'component-library/lib/Button' 我想将所有导入内
import { Grid, Heading, Button } from 'component-library'
import { Grid } from 'component-library/lib/Grid'
import { Heading } from 'component-library/lib/Heading'
import { Button } from 'component-library/lib/Button'
我想将所有导入内容更改为以下内容:
import { Grid, Heading, Button } from 'component-library'
import { Grid } from 'component-library/lib/Grid'
import { Heading } from 'component-library/lib/Heading'
import { Button } from 'component-library/lib/Button'
我在VSCode上找到了一个用于执行此操作的扩展:而且它似乎也接受正则表达式。 我试图编写一个正则表达式来寻找一个替换旧导入到新导入的正则表达式,但我的正则表达式不起作用。这是我当前的正则表达式:
(?:import)\s+([\w,{}\s\*]+)\s+(?:from)?\s*(?:["'])?([@\w\s\\\/.-]+)(?:["'])?\s*
你能帮我解决这个问题吗?没有任何扩展,只要在匹配的情况下多次使用正则表达式即可: 查找: 替换:
$1$2$4$5$6$5\n$1$3$4$5$6$5
见
模式将匹配并将部分模式捕获到单独的组中。每次只捕获圆括号中的第一个单词,并输出一行仅包含该单词的行+换行符和括号内包含其他单词的行
这就是为什么您需要运行搜索和替换,直到找不到匹配项为止。您可以通过两个步骤来完成(这和我的正则表达式fu一样好) 步骤1:
(导入\{)((\w+[,]+)(?=.*(\}来自'(.*))
搜索正则表达式
从“$5/lib/$3”导入{$3}\n
查找正则表达式
这就从“伟大的图书馆”中留下了一个游离的
}每个原始import
行的代码>隐藏(也许有人可以改进正则表达式以避免这种情况),因此使用以下方法删除它:
^\}来自。*$
搜索
什么都没有取代
有一些multi-regex-replace扩展,您可以将这两个步骤合并为一个步骤。例如,使用以下“脚本”:
replace regex“(导入{)?(\w+[,]+)(?=*(}来自'(.*))”
使用“从“$5/lib/$3”导入{$3}\n”
替换regex“(?…将为组[1]=>“网格、标题、按钮”和组[3]提供=>“组件库”…因此需要拆分第一个匹配组的模块名称空间,修剪每个名称空间,并为第三个组中匹配的模块名称提供导入语法…我不知道插件是否支持自定义替换功能。使用此插件,您可以向代码段添加javascript