如何用正则表达式匹配本地路径并排除模块路径?
正则匹配本地路径并排除模块路径解决方案
需求明确
需要匹配的本地路径格式示例:
@/path/to @@/path/to ./path/to ../path/to ../../path/to
需要排除的路径:类似@next/module的模块路径(即@后接非斜杠字符的路径)
原正则问题分析
你之前使用的正则^[./|~/|@/|@@/]存在逻辑错误:
- 字符集
[]内的内容是单个字符的集合,@/会被拆解为@和/两个独立字符,|也只是普通字符而非逻辑或 - 该正则实际会匹配所有以
.、/、|、~、@开头的字符串,因此会错误命中@next/module这类模块路径
正确正则表达式
^(?:(?:\.\./)+|\./|@@?/)
规则解释
^:锚定字符串开头,确保仅匹配路径起始符合规则的情况(?:...):非捕获分组,用于整合多种匹配模式且不产生额外捕获组(?:\.\./)+:匹配1次或多次../,覆盖多级上级目录路径(如../、../../)|\./:或匹配当前目录起始的./路径|@@?/:或匹配@/(单个@加斜杠)或@@/(双@加斜杠)的路径
验证效果
- 匹配:所有符合需求的本地路径示例
- 不匹配:
@next/module这类@后接非斜杠字符的模块路径
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

