JavaScript正则如何匹配带后缀文件路径,排除目录路径?
匹配带后缀的文件路径(而非目录)的JavaScript正则表达式
当然可以实现这个需求!我们可以通过正则精准区分带后缀的文件路径和目录路径,核心是盯紧路径的「最后一段内容」——必须包含后缀分隔符.,且.后面有有效后缀字符,同时路径不能以/结尾(避免把带后缀的目录名误判为文件)。
最终正则表达式
const fileRegex = /^\/(?!.*\/$).*\.[^\/]+$/;
正则拆解(帮你理解每部分作用)
^\/:确保路径以/开头(符合Unix风格路径的特点)(?!.*\/$):负向预查,排除所有以/结尾的路径(这类通常是目录).*\.:匹配任意字符,直到遇到最后一个.(后缀的分隔符)[^\/]+$:匹配.之后的所有非/字符,直到路径结尾——保证这部分是有效的文件后缀(比如.js、.txt)
测试你的示例
我们用你的三个例子验证一下:
console.log(fileRegex.test('/foo/bar/baz')); // false(无后缀,是目录) console.log(fileRegex.test('/foo/bar/baz.js')); // true(带.js后缀,是文件) console.log(fileRegex.test('/foo/bar/baz.js/foo'));// false(最后一段是无后缀的foo,是目录)
额外边缘情况测试
再补充几个常见场景,确保正则靠谱:
console.log(fileRegex.test('/index.html')); // true(根目录下的文件) console.log(fileRegex.test('/foo/bar/file.js/')); // false(以/结尾,是目录) console.log(fileRegex.test('/foo.bar')); // true(根目录下带后缀的文件) console.log(fileRegex.test('/foo/bar.baz/file')); // false(最后一段无后缀)
如果你的路径可能包含Windows风格的\,只需要把正则里的\/替换为[\/\\]即可,但看你的示例都是Unix风格,所以上面的正则完全够用。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

