模块:ReplacePlus
跳转到导航
跳转到搜索
此模块的文档可以在模块:ReplacePlus/doc创建
local module = {}
local getArgs = require('Module:Arguments').getArgs
function _main(args, frame)
local str = args['str'] or args[1] or ''
local ptn = args['ptn'] or args[2] or ''
local replace = args['rep'] or args[3] or ''
local split = args['spl'] or args[4] or '、'
local limit = args['lim'] or args[5] or 'false'
local origin = tonumber(args['ori'] or args[6] or 1)
local noprint = args['noprint'] or false
str = mw.ustring.sub(str, origin)
local captures = {}
local result, count = ''
if string.find(limit, '%d+') then
limit = tonumber(limit)
result, count = mw.ustring.gsub(str, ptn, function(s)
captures[#captures + 1] = s
return s
end, limit)
result = mw.ustring.gsub(str, ptn, replace, limit)
else
result, count = mw.ustring.gsub(str, ptn, function(s)
captures[#captures + 1] = s
return s
end)
result = mw.ustring.gsub(str, ptn, replace)
end
local capture = ''
for i, v in ipairs(captures) do
capture = capture..v..split
end
split = mw.ustring.gsub(split, '([%%%(%)%.%+%-%*%?%[%]%^%$])', '%%%1')
capture = mw.ustring.gsub(capture, '^(.*)'..split..'$', '%1')
frame:callParserFunction('#vardefine', 'result.capture', capture)
frame:callParserFunction('#vardefine', 'result.count', count)
if noprint ~= 'true' then
return result
else
frame:callParserFunction('#vardefine', 'result', result)
return ''
end
end
function module.main(frame)
local args = getArgs(frame)
return _main(args, frame)
end
return module