You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua 5.1或Neovim中用正则匹配多种文件扩展名?

Lua文件扩展名匹配问题解决

你的代码失效的核心原因是Lua的字符串模式匹配不支持标准正则的|分支语法,你写的%.(mp4|mkv|avi|mov|flv|wmv)$里的|会被当成普通字符处理,自然匹配不到目标扩展名。

解决方案1:用表集合快速判断扩展名(推荐)

这种方式无需循环,利用Lua表的键查找特性实现高效判断,完全符合你的需求:

local myFile = "/test/file.mp4"
-- 定义合法扩展名集合,键存储实现O(1)快速查找
local validExtensions = {
    ["mp4"] = true,
    ["mkv"] = true,
    ["avi"] = true,
    ["mov"] = true,
    ["flv"] = true,
    ["wmv"] = true
}
-- 提取转小写后的文件扩展名
local ext = myFile:lower():match("%.(%w+)$")
-- 检查扩展名是否合法
if validExtensions[ext] then
    print("match")
end

解决方案2:纯模式匹配(可读性稍弱)

如果坚持要用单个模式匹配,可利用字符类组合覆盖所有目标扩展名(均为3个字符):

local myFile = "/test/file.mp4"
-- 构建适配Lua模式的匹配规则
if myFile:lower():match("%.([mawf][pkovlv][4vie4v])$") then
    print("match")
end

注:该模式通过字符类逐个位置匹配扩展名的可能字符,虽然能实现需求,但可读性远不如表集合方式,仅适合简单场景。

原代码失效的细节说明

Lua的字符串匹配使用的是模式匹配语法,而非标准正则表达式,其中不支持(a|b)这类分支语法。你原代码中的(mp4|mkv|...)会被解析为包含括号和竖线的普通字符串匹配规则,自然无法匹配.mp4这类正常的扩展名格式。

内容的提问来源于stack exchange,提问作者Carson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:49:53