在Lua中获取当前文件名

whi*_*lXK 5 lua filenames

如何获取没有路径和.lua的当前文件名?

我尝试过:

local info = debug.getinfo(1,'S');
print(info.source);
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

@data/spells/scripts/10lvl/bakurichimacha.lua
@data/spells/scripts/1000lvl/brave sword attack.lua
Run Code Online (Sandbox Code Playgroud)

如何删除这些部分:

@data/spells/scripts/10lvl/ and .lua
@data/spells/scripts/1000lvl/ and .lua
Run Code Online (Sandbox Code Playgroud)

只打印 bakurichimacha 和勇敢的剑攻击?

Soh*_*jan 7

尽管接受的 @kingjulian 答案似乎在大多数情况下都有效,但对于无路径文件名参数来说却失败了。例如。aTestFile.lua等

我对正则表达式进行了一些修改以包含这些缺失的场景

function get_file_name(file)
      return file:match("[^/]*.lua$")
end
Run Code Online (Sandbox Code Playgroud)

在这里测试过

获取不包括扩展名 .lua 的唯一文件名

function get_file_name(file)
      local file_name = file:match("[^/]*.lua$")
      return file_name:sub(0, #file_name - 4)
end
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 string.match 函数

local filename = function()
  local str = debug.getinfo(2, "S").source:sub(2)
  return str:match("^.*/(.*).lua$") or str
end
print(filename());
Run Code Online (Sandbox Code Playgroud)


kin*_*ian 4

尝试这个:

function get_file_name(file)
      return file:match("^.+/(.+)$")
end
Run Code Online (Sandbox Code Playgroud)