正则表达式匹配扩展名但排除特定文件

3
我在webpack.config中需要包含扩展名以匹配特定的文件类型,但我需要排除一个特定的文件。我搜索了一下,但没有找到完美的解决方案。
我的现有代码:/\.(?:css|less)$/ -> 匹配所有具有.less或.css的文件,但我想要添加“不仅仅是 -> test.something_strict.less/\.(?:css|less|!test.less)$/,其中test.something_strict是带有扩展名.less的文件名,只排除test.something_strict 但这并没有起作用,它匹配.less或.css并通过测试。

1
我不完全理解你的规格说明。但是根据你提供的信息,这个链接可以吗? - Rahul
@Rahul,你理解我了。 - ashbuilds
@Rahul,你可以发布它作为另一种选择。 - ashbuilds
这将是现有解决方案的子集。不鼓励这样做。 - Rahul
1
@AshishMishra:你的新规格和之前的完全不同。 - Rahul
显示剩余3条评论
1个回答

7

|!test.less并不真正否定匹配test.less。它会在test.less之前字面匹配!

您可以使用这个正则表达式:

/^(?!test\.[^.]+\.less$).+\.(?:css|less)$/m

正则表达式演示

(?!test\.less$)是一个负向前瞻,如果文件名是test.<anything>.less,它将断言失败。


我已经尝试过了,它可以工作 -> 有没有可能将 "test.less" 更改为 "test.dark.less"?其中 test.dark 是一个带有 ".less" 扩展名的文件名。 - ashbuilds
当然,让我很快地尝试一下 :) - ashbuilds
你好,你的答案很好用。我能否将 [^.]+ 替换为严格的单词,比如 darklight - ashbuilds
嗨,我尝试过了,但问题是如果我写“dark”,也会除了“light”之外吗?:( - ashbuilds
1
你可以使用/^(?!test\.(?:light|dark)\.less$).+\.(?:css|less)$/m来否定这两个单词。 - anubhava
1
非常好用,谢谢 :) - ashbuilds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接