如何编写JavaScript正则表达式:匹配.ts后缀但排除.vue.ts文件?
解决方案:匹配纯.ts后缀文件,排除.vue.ts结尾的情况
我懂你要的需求——就是要精准识别那些直接以.ts结尾的文件,像file.vue.ts这种带着.vue前缀后缀的绝对不能算对吧?试一下这个正则表达式,应该能解决你的问题:
/(?<!\.vue)\.ts$/
来拆解一下这个正则的逻辑:
$:锚定到字符串的末尾,保证我们匹配的.ts是文件名的最后一部分(?<!\.vue):这是负向后瞻断言,简单说就是“在.ts这个位置的前面,绝对不能出现.vue这串字符”
这样一来:
file.ts会被匹配:.ts前面是文件名的其他部分,没有.vuefile.vue.ts会被排除:.ts前面刚好就是.vue,触发了断言的排除规则
你可以用JavaScript的test方法快速验证效果:
const tsRegex = /(?<!\.vue)\.ts$/; // 测试用例 console.log(tsRegex.test("file.ts")); // true ✅ console.log(tsRegex.test("file.vue.ts")); // false ❌ console.log(tsRegex.test("src/app.ts")); // true ✅ console.log(tsRegex.test("src/comp.vue.ts")); // false ❌
如果你的运行环境比较老旧(不支持ES2018的后瞻断言特性),可以用这个替代方案,逻辑是先排除所有.vue.ts结尾的文件,再匹配.ts结尾的:
/^(?!.*\.vue\.ts$).*\.ts$/
这个方案兼容性更好,不过写法上不如负向后瞻直观,优先推荐第一个正则哦~
内容的提问来源于stack exchange,提问作者Tom Shane
相关产品推荐
相关产品推荐

