正则表达式如何匹配多个JavaScript import语句
解决JavaScript Import语句的正则匹配问题
你的问题出在正则里的贪婪匹配:原正则中的.*会尽可能匹配最多的内容,导致从第一个import开始,直接匹配到字符串末尾的分号,把两个语句当成了一个整体。
修正后的正则方案
针对你给出的默认导入场景,推荐使用非贪婪匹配来限制范围,同时让正则更贴合JS语法规则:
import\s+([\w$]+)\s+from\s+['"](.*?\.js)['"]\s*;
正则各部分说明
import\s+:匹配import关键字及后续任意空白字符([\w$]+):捕获合法的JS变量名(支持字母、数字、下划线、$,对应你例子中的$和dirtyFormUnload)\s+from\s+:匹配from关键字及前后的空白['"]:匹配单引号或双引号(覆盖字符串的引号边界)(.*?\.js):非贪婪匹配.js结尾的文件路径,确保不会跨语句匹配['"]\s*;:匹配闭合引号、可选空白字符和语句结束的分号
测试效果
用你提供的输入字符串:
import $ from "./components/jquery.js"; import dirtyFormUnload from "./components/dirtyFormUnload.js";
匹配后会得到两个独立的结果:
import $ from "./components/jquery.js";import dirtyFormUnload from "./components/dirtyFormUnload.js";
关键改进点
把原正则中的贪婪匹配.*替换为非贪婪匹配.*?,让正则在遇到第一个满足后续条件(比如from、闭合引号)时就停止匹配,从而精准捕获单个import语句。
内容的提问来源于stack exchange,提问作者Agreene
相关产品推荐
相关产品推荐

