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

Lua开发问题:提取所有以$开头的单词并逐一调用API替换

Lua提取$开头通配符并替换的实现方案

步骤1:提取所有$开头的通配符

使用string.gmatch遍历目标字符串,匹配以$开头的单词(默认单词由字母、数字、下划线组成,可按需调整匹配规则),将提取到的通配符存入table,同时通过去重逻辑避免重复调用API。

示例代码:

local original_str = "Hello $name, your score is $score. $name, don't forget $task"
local wildcards = {}
local seen = {} -- 用于去重

-- 匹配$开头的单词,"%$%w+"表示$后跟一个或多个字母/数字/下划线
for wc in string.gmatch(original_str, "%$%w+") do
    if not seen[wc] then
        table.insert(wildcards, wc)
        seen[wc] = true
    end
end

-- 此时wildcards = {"$name", "$score", "$task"}

步骤2:调用API获取对应值

遍历通配符table,逐个传入API()函数,将返回值存入映射表(键为通配符,值为API返回结果),方便后续替换。

示例代码:

local wc_values = {}
for _, wc in ipairs(wildcards) do
    -- 去掉开头的$,将纯标识符传给API(若API需接收不带$的参数)
    local key = string.sub(wc, 2)
    wc_values[wc] = API(key)
end

步骤3:替换原字符串重建内容

遍历映射表,将原字符串中的每个通配符替换为对应的值。这里可以用循环替换或string.gsub配合映射表查找,按需选择。

示例代码:

local result_str = original_str
for wc, val in pairs(wc_values) do
    result_str = string.gsub(result_str, wc, val)
end

print(result_str) -- 输出替换后的最终字符串

补充说明

  • 如果通配符包含字母数字下划线以外的字符,可调整string.gmatch的匹配模式,比如要匹配$后跟任意非空白字符,改用"%$[^%s]+"即可。
  • 去重步骤为可选操作,若你的场景允许重复调用API,或API返回值不受重复调用影响,可以移除seen表相关逻辑。

内容的提问来源于stack exchange,提问作者Tormy Van Cool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:26:06