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

时间:2018-03-19 16:41:36

标签: javascript regex webpack-loader

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

.icon.svg

的规则示例
config.module.rules.push({
    test: /\.svg$/,
    loader: 'vue-svg-loader'
})

2 个答案:

答案 0 :(得分:1)

匹配所有.svg个文件,但不包括.icon.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'
},

答案 1 :(得分:0)

这将成功。

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

这个正则表达式使用了一个称为负向前瞻的东西,所以基本上它会在“.svg”之前排除任何包含.icon的东西