我有很多使用裸模块说明符的npm / Yarn JS库,例如:
import { ComponentName } from '@org/component-name';
我正在尝试构建一个正则表达式,以用JS可以理解的相对路径替换这些正则表达式:
import { ComponentName } from '../@org/component-name/component-name.js';
我正在使用正则表达式执行此操作,当前看起来是like this:
/(?<key>import|export)\s+(?:(?:\s*(?<alias>[\w\r\n\t,{}\s\* ]+)\s*)\s*from)?\s*(?:["']?(?<ref>[@\w\s\\\/\-\.]+)["']?)/gm
到目前为止:
import
或export
关键字。然后我可以找到所有匹配项,在磁盘上找到引用,找出相对路径,然后将其插入。
我正在.NET Core上的C#中执行此操作。
如何排除注释内的示例import
语句?
这目前不包括动态import
语句,它可能应该包含,但由于它们没有显式别名,因此最好单独使用。
是否有更好的方法来处理.NET中的替换?
答案 0 :(得分:1)
我建议使用以下正则表达式:
(?<key>import|export)\s+(?:(?<alias>[\w,{}\s\*]+)\s+from)?\s*(?:(["'])?(?<ref>[@\w\s\\\/.-]+)\3?)\s*;
\s
速记字符已经包含\r\n\t
,
和不需要转义字符类中的所有特殊字符,例如-
是ref
捕获组中的最后一个项目。
我们可以使用反向引用来确保可选的结束报价与开始报价的类型相同。