如何编写匹配不含'critical'且以s?css结尾的正则表达式
解决不含'critical'的CSS/SCSS文件名匹配正则问题
嘿,你的第一个正则写得没问题!咱们来搞定第二个的问题~
首先,你原来的/.*?(?<!\.critical).*\.s?css$/之所以失效,是因为这个**反向后顾(negative lookbehind)**只检查了某个位置前面不是.critical,但没法保证整个字符串里完全没有critical这个子串——比如critical.css还是会被它匹配到,因为在某个位置前面确实没有.critical。
正确的第二个正则写法
我们需要用**否定预查(negative lookahead)**来确保整个字符串里不存在critical,再结合后缀匹配:
/^(?!.*critical).*\.s?css$/
拆解一下原理:
^:锚定字符串的开头,确保预查从整个字符串的最开始生效(?!.*critical):否定预查断言——意思是“从当前位置(也就是字符串开头)往后看,找不到任何位置出现critical子串”.*:匹配任意数量的任意字符(这里用贪婪匹配就足够,不会影响结果)\.s?css$:匹配结尾的.css或者.scss(s?表示s可选)
测试验证
- ✅ 会匹配的字符串:
main.css、dashboard.scss、ui-components.css(完全不含critical) - ❌ 不会匹配的字符串:
critical.scss、app-critical.css、theme.critical.scss(包含critical子串)
如果需要忽略大小写(比如匹配Critical.css也排除),可以加上i标志:
/^(?!.*critical).*\.s?css$/i
内容的提问来源于stack exchange,提问作者Axiol
相关产品推荐
相关产品推荐

