Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于允许某个文件而排除所有其他文件的正则表达式_Regex - Fatal编程技术网

Regex 用于允许某个文件而排除所有其他文件的正则表达式

Regex 用于允许某个文件而排除所有其他文件的正则表达式,regex,Regex,我使用以下正则表达式来控制多种文件类型: *\.(?:css|js|map|eot|ttf|woff|woff2)$ 但是我想从这个正则表达式中排除一个特定的config.js文件。如何实现它?由于nginx.conf中支持lookback,您可以在正则表达式中使用此lookback断言: .*\.(?:css|js|map|eot|ttf|woff|woff2)(?<!\bconfig\.js)$ ??是在匹配其他*.js、*.css等文件时跳过匹配config.js的反向查找断言\

我使用以下正则表达式来控制多种文件类型:

*\.(?:css|js|map|eot|ttf|woff|woff2)$

但是我想从这个正则表达式中排除一个特定的config.js文件。如何实现它?

由于nginx.conf中支持lookback,您可以在正则表达式中使用此lookback断言:

.*\.(?:css|js|map|eot|ttf|woff|woff2)(?<!\bconfig\.js)$

??是在匹配其他*.js、*.css等文件时跳过匹配config.js的反向查找断言\b表示单词边界。

由于nginx.conf中支持lookback,您可以在正则表达式中使用此lookback断言:

.*\.(?:css|js|map|eot|ttf|woff|woff2)(?<!\bconfig\.js)$

??是在匹配其他*.js、*.css等文件时跳过匹配config.js的反向查找断言\b代表单词边界。

实际上,您可以使用负的lookahead而不是lookbehind,因为lookbehind通常不太受支持,比如Javascript支持lookaheads,但不支持lookahinds,除非您使用的是Ecma脚本2018或更高版本,如果您只是想例外地不允许config.js名称,因此使用以下正则表达式

^(?!config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$
^(?!(.*[\\\/])?config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$
这里^?!如果输入仅为且仅为config.js where,则config\.js$part将拒绝匹配,因为它将允许例如myconfig.js,我相信您可能希望允许

我还把你的woff | woff2缩短为woff2?因为两者的意思相同,并且使正则表达式更加紧凑

编辑:

正如Anubhav指出的,config.js文件名前面可能有一个目录名,在这种情况下,可以使用以下正则表达式:

^(?!config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$
^(?!(.*[\\\/])?config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$

实际上,您可以使用负的lookahead而不是lookbehind,因为lookbehind通常不太受支持,比如Javascript支持lookaheads,但不支持lookbehind,除非您使用的是Ecma script 2018或更高版本,如果您只是想例外地不允许config.js名称,因此使用以下正则表达式

^(?!config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$
^(?!(.*[\\\/])?config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$
这里^?!如果输入仅为且仅为config.js where,则config\.js$part将拒绝匹配,因为它将允许例如myconfig.js,我相信您可能希望允许

我还把你的woff | woff2缩短为woff2?因为两者的意思相同,并且使正则表达式更加紧凑

编辑:

正如Anubhav指出的,config.js文件名前面可能有一个目录名,在这种情况下,可以使用以下正则表达式:

^(?!config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$
^(?!(.*[\\\/])?config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$

你的正则表达式平台是什么?如果支持查找,则使用:\.?:css | js | map | eot | ttf | woff | woff2?。顺便说一句,在正则表达式的开头有一个冗余的*为什么开头有*冗余?*表示正则表达式开头和点字符之间可以有任意数量的字符。在正则表达式中,即。*不是*您试图根据文件名排除特定文件,对吗?@anubhava,请添加您建议的正则表达式作为答案,以便我可以将其标记为已接受。您的正则表达式平台是什么?如果支持查找,则使用:\.?:css | js | map | eot | ttf | woff | woff2?。顺便说一句,在正则表达式的开头有一个冗余的*为什么开头有*冗余?*表示正则表达式开头和点字符之间可以有任意数量的字符。在正则表达式中,即。*不是*您试图根据文件名排除特定文件,对吗?@anubhava,请添加您建议的正则表达式作为答案,以便我可以将其标记为Accepted Hey Anubhav,回答得很好,但除了OP可能允许的config.js之外,您的正则表达式还可能阻止类似myconfig.js的内容。谢谢,通过在Lookback中添加\b可以轻松解决此问题。请参阅更新的答案。嗯\b仍然会阻止像my-config.js这样的名称,以及在config.js文件名之前存在非单词字符的任何名称。请参阅我的更新版,它只处理config.js文件名或在config.jsHey Anubhav之前有目录名的路径,回答得很好,但是除了OP可能允许的config.js之外,您的正则表达式还可能阻止类似myconfig.js的内容。谢谢,通过在lookback中添加\b可以轻松修复这一问题。请参阅更新的答案。嗯\b仍然会阻止像my-config.js这样的名称,以及在config.js文件名之前存在非单词字符的任何名称。请参阅我的更新版,它只处理config.js文件名或在config.js之前有目录名的路径。如果在开始时找到,则只跳过config.js。例如,它不会跳过/file/config.js。@anubhava:Hey buddy,虽然OP没有提到在文件名之前存在目录名,但是可以通过选择使用目录分隔符来轻松处理。更新了我的答案。只有在开始时找到config.js,才会跳过它。例如,它不会跳过/file/config.js。@anubhava:Hey buddy,虽然OP没有提到在文件名之前存在目录名,但是可以通过选择使用目录分隔符来轻松处理。更新了我的答案。