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

FiveM环境下Lua的:gsub/string.gsub替换指定文本失效问题求助

Lua gsub 替换不生效问题排查

核心原因

  • Lua 的 string.gsub 第二个参数默认是模式匹配字符串,而非普通字面量,你要匹配的内容包含多个模式特殊字符(.、(、)),未转义时无法正常匹配目标内容。
  • 从你给出的运行输出可以看到,第一次打印的结果就已经没有 <script>、</script> 标签,说明 FiveM 运行环境在你执行替换逻辑前,就已经自动剥离了字符串内的 HTML 脚本标签,此时变量中已经不存在你写的完整匹配片段,自然替换不生效。

解决方案

方案1:适配环境过滤规则,直接匹配剩余内容

因为环境已经提前去掉了script标签,直接匹配剩下的脚本内容即可:

b = 'Just testing.<script>window.location.replace("http://google.com");</script>'
print(b)
-- 直接匹配过滤后残留的脚本内容
b = b:gsub('window%.location%.replace%("http://google%.com"%)%;', "")
print(b)

方案2:普通字面量替换(不需要模式匹配时用)

如果需要直接按字符串字面量完全匹配替换,可以先封装转义函数,避免手动处理特殊字符:

-- 封装字面量替换函数,自动转义所有模式特殊字符
local function literalReplace(str, oldStr, newStr)
    local escapedOld = oldStr:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", "%%%0")
    return str:gsub(escapedOld, newStr)
end

-- 调用示例,直接传入原始要替换的内容即可
b = literalReplace(b, 'window.location.replace("http://google.com");', "")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:03