【发布时间】:2017-03-26 17:37:51
【问题描述】:
所以我使用 Lua 来替换来自 Nginx 服务器的响应页面的 HTML 输出。为了使 value="*" HTML 标记为空。
问题是,在 Lua 替换字符串之后,我不断丢失 HTML 的结尾,并使引号之间的内容在该字符串消失后清空同一行上的其余 HTML。
Lua 代码:
body_filter_by_lua_block {
local body = ngx.arg[1] --Put body into local var
local htmlvaluetomakeempty = "id=\"username\" value="
local loginpagematch = ngx.re.match(body, "" .. htmlvaluetomakeempty .. "\"(?:.*)\"") --Search through body to see if our html match is found
if loginpagematch then --If not empty
body = ngx.re.gsub(body, "" .. htmlvaluetomakeempty .. "\"(?:.*)\"", "" .. htmlvaluetomakeempty .. "\"\"") --.. loginpagematch["match"] )
ngx.arg[1] = body
end
}
Lua 将替换的 HTML 代码:
<div class="login-fields"><label id="username-lbl" for="username" class="">User Name</label> <input type="text" name="username" id="username" value="test" class="validate-username" size="25"/></div>
Lua 运行并修改正文内容后,输出如下所示
<div class="login-fields"><label id="username-lbl" for="username" class="">User Name</label> <input type="text" name="username" id="username" value=""/></div>
问题是这段 HTML 代码也因未知原因被删除了
class="validate-username" size="25"
它确实成功地使 id="username" value="" 为空,但我也丢失了它之后的 HTML,我不知道为什么。
【问题讨论】:
-
gsub 中可能需要非贪婪匹配:
"\"(?:.*?)\"" -
谢谢,你是对的,只是修改了我的正则表达式以匹配它并解决了问题:D