置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:ReplacePlus

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
  1. local module = {}
  2. local getArgs = require('Module:Arguments').getArgs
  3. function _main(args, frame)
  4. local str = args['str'] or args[1] or ''
  5. local ptn = args['ptn'] or args[2] or ''
  6. ptn = mw.text.decode(mw.text.unstripNoWiki(ptn))
  7. local replace = args['rep'] or args[3] or ''
  8. local split = args['spl'] or args[4] or '、'
  9. local limit = args['lim'] or args[5] or 'false'
  10. local origin = tonumber(args['ori'] or args[6] or 1)
  11. local noprint = args['noprint'] or false
  12. str = mw.ustring.sub(str, origin)
  13. local captures = {}
  14. local result, count = ''
  15. if string.find(limit, '%d+') then
  16. limit = tonumber(limit)
  17. result, count = mw.ustring.gsub(str, ptn, function(s)
  18. captures[#captures + 1] = s
  19. return s
  20. end, limit)
  21. result = mw.ustring.gsub(str, ptn, replace, limit)
  22. else
  23. result, count = mw.ustring.gsub(str, ptn, function(s)
  24. captures[#captures + 1] = s
  25. return s
  26. end)
  27. result = mw.ustring.gsub(str, ptn, replace)
  28. end
  29. frame:callParserFunction('#vardefine', 'result.capture', table.concat(captures, split))
  30. frame:callParserFunction('#vardefine', 'result.count', count)
  31. if noprint ~= 'true' then
  32. return result
  33. else
  34. frame:callParserFunction('#vardefine', 'result', result)
  35. return ''
  36. end
  37. end
  38. function module.main(frame)
  39. local args = getArgs(frame)
  40. return _main(args, frame)
  41. end
  42. function module.multi(frame)
  43. local args = getArgs(frame, { warppers = 'Template:Str_replace_multi' } )
  44. local text = args[1] or ''
  45. local done = {}
  46. if args[2] then
  47. local sort = mw.text.split(mw.ustring.gsub(args[2], '|+', '|'), '|')
  48. while sort[#sort] == '' do
  49. table.remove(sort, #sort)
  50. end
  51. for _, key in ipairs(sort) do
  52. if key ~= 1 and key ~= 2 then
  53. text = mw.ustring.gsub(text, key, args[key])
  54. end
  55. done[key] = true
  56. end
  57. end
  58. -- 允许对顺序不依赖的情况直接使用模块
  59. for key, val in pairs(args) do
  60. if not done[key] and key ~= 1 and key ~= 2 then
  61. text = mw.ustring.gsub(text, key, val)
  62. end
  63. end
  64. return text
  65. end
  66. return module