Raxter留言 | 贡献
创建页面,内容为“local p = {} local getArgs = require('Module:Arguments').getArgs local function showError(err) return '<span class="error">' .. tostring(err) .. '</span>' end local function performMatch(text, pattern) local result = text:match(pattern) if result == nil then error("No match found") end return result end local function performReplace(text, pattern, use) local result = text:gsub(pattern, use) if result == text then e…”
 
Raxter留言 | 贡献
无编辑摘要
 
(未显示同一用户的1个中间版本)
第2行: 第2行:
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs


local function showError(err)
local function errMsg(s)
     return '<span class="error">' .. tostring(err) .. '</span>'
     return '<span class="error">' .. tostring(s) .. '</span>'
end
end


local function performMatch(text, pattern)
function p.match(frame)
     local result = text:match(pattern)
     local args      = getArgs(frame)
     if result == nil then
    local str      = args[1] or ''
         error("No match found")
    local pattern   = args[2] or ''
    local fmt      = args[3] or '$1'
    local noMatch  = args[4] or ''
 
     if str == '' or pattern == '' then
         return noMatch or errMsg('缺少文本或正则')
     end
     end
    return result
end


local function performReplace(text, pattern, use)
     local caps = {str:match(pattern)}
     local result = text:gsub(pattern, use)
     if #caps == 0 then
     if result == text then
         return noMatch or errMsg('正则未匹配到任何内容')
         error("No use occurred")
     end
     end
    return result
end


function p.match(frame)
     if not fmt:find('$%d') then
     local args = getArgs(frame)
         return fmt
    local text = args[1] or ''
    local pattern = args[2] or ''
 
    if not text or not pattern then
         return showError("警告:文字或正则表达式缺失。")
     end
     end


     local result
     local out = fmt
     local status, err = pcall(function()
     for i = 1, #caps do
         result = performMatch(text, pattern)
         out = out:gsub('$' .. i, caps[i])
    end)
 
    if status then
        return result
    else
        return showError(err)
     end
     end
    return out
end
end


function p.replace(frame)
function p.replace(frame)
     local args = getArgs(frame)
     local args   = getArgs(frame)
     local text = args[1] or ''
     local str    = args[1] or ''
     local pattern = args[2] or ''
     local pattern = args[2] or ''
     local use = args[3] or ''
     local replace = args[3] or ''
 
     if str == '' or pattern == '' or replace == '' then
     if not text or not pattern or not use then
         return errMsg('缺少文本、正则或替换内容')
         return showError("文字、正则表达式或者使用函数错误。")
     end
     end
 
     local ok, res = pcall(function()
    local result
         return (str:gsub(pattern, replace))
     local status, err = pcall(function()
         result = performReplace(text, pattern, use)
     end)
     end)
 
     if not ok then return errMsg(res) end
     if status then
     return res
        return result
    else
        return showError(err)
     end
end
end


return p
return p