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

Lua中如何获取不含路径与.lua后缀的当前文件名?

提取Lua脚本文件名(去除路径前缀和.lua后缀)

这问题在Lua脚本开发里挺常见的,用字符串处理就能轻松搞定,给你两种实用的实现方式:

方法一:一行正则式搞定(简洁高效)

利用Lua的string.gsub配合模式匹配,直接提取我们需要的部分:

local info = debug.getinfo(1, 'S')
local raw_filename = info.source
-- 匹配并提取核心文件名
local clean_filename = raw_filename:gsub("^@.*/(.*)%.lua$", "%1")
print(clean_filename)

模式解释:

  • ^@:匹配字符串开头的@符号
  • .*:匹配从@到最后一个/之间的所有路径内容
  • (.*):捕获最后一个/之后、.lua之前的文件名(包括空格)
  • %.lua$:匹配字符串结尾的.lua后缀
  • %1:用捕获到的文件名替换整个原字符串

测试你的两个输入:

  • @data/spells/scripts/10lvl/bakurichimacha.lua → 输出 bakurichimacha
  • @data/spells/scripts/1000lvl/brave sword attack.lua → 输出 brave sword attack

方法二:分步处理(直观易懂)

如果觉得正则式有点抽象,可以拆成几步处理,逻辑更清晰:

local info = debug.getinfo(1, 'S')
local raw_filename = info.source

-- 1. 去掉开头的@符号
local without_at = raw_filename:sub(2)
-- 2. 找到最后一个/的位置
local last_slash_idx = without_at:find("/[^/]*$")
-- 3. 截取/后面带后缀的文件名
local name_with_ext = without_at:sub(last_slash_idx + 1)
-- 4. 去掉.lua后缀(.lua是4个字符,所以截取到倒数第5位)
local clean_filename = name_with_ext:sub(1, -5)

print(clean_filename)

这种方式每一步都有明确的操作,适合新手理解和调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:01:47