JavaScript正则表达式匹配文件扩展名,但不包括前缀扩展名



我需要使用正则表达式匹配 webpack 规则的文件扩展名。我想为目标 svg 文件制定两个单独的规则:*.svg*.icon.svg 。这些规则必须是互斥的。通过测试/.icon.svg$/很容易捕获 *.icon.svg 场景。但是,捕获所有.svg扩展名(不包括以 .icon.svg 结尾的文件(的表达式应该是什么?

.icon.svg的规则示例

config.module.rules.push({
    test: /.svg$/,
    loader: 'vue-svg-loader'
})

匹配除.icon.svg之外的所有.svg文件

/(?!.*.icon.svg$)^.+.svg$/

仅匹配.icon.svg

/.icon.svg$/

所以,这将看起来像这样:

{
    // match all .svg files EXCEPT .icon.svg
    test: /(?!.*.icon.svg$)^.+.svg$/,
    loader: 'specific-loader-name'
},
{
    // Match only .icon.svg files
    test: /.icon.svg$/,
    loader: 'different-loader'
},

就可以了。

{
   test:/^(?!.*.icon).svg$/i 
   ...
}

这个正则表达式使用一种叫做否定前瞻的东西,所以基本上它会排除在".svg"之前包含 .icon 的任何内容

最新更新