Module:String: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(adds updated match support with wider parameter choices, whitespace handling, etc.) |
(add nomatch option to str.match) |
||
Line 113: | Line 113: | ||
Usage: |
Usage: |
||
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag}} |
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} |
||
OR |
OR |
||
{{#invoke:String|pos|s=source_string|pattern=pattern_string|start=start_index |
{{#invoke:String|pos|s=source_string|pattern=pattern_string|start=start_index |
||
|match=match_number|plain=plain_flag}} |
|match=match_number|plain=plain_flag|nomatch=nomatch_output}} |
||
Parameters |
Parameters |
||
Line 128: | Line 128: | ||
counting from the last match. Hence match = -1 is the same as requesting |
counting from the last match. Hence match = -1 is the same as requesting |
||
the last match. Defaults to 1. |
the last match. Defaults to 1. |
||
plain: A flag indicating that the pattern should be understood as plain |
|||
text. Defaults to false. |
text. Defaults to false. |
||
nomatch: If no match is found, output the "nomatch" value rather than an error. |
|||
If invoked using named parameters, Mediawiki will automatically remove any leading or |
If invoked using named parameters, Mediawiki will automatically remove any leading or |
||
Line 148: | Line 149: | ||
]] |
]] |
||
function str.match( frame ) |
function str.match( frame ) |
||
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain'} ); |
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ); |
||
local s = new_args['s'] or ''; |
local s = new_args['s'] or ''; |
||
local start = tonumber( new_args['start'] ) or 1; |
local start = tonumber( new_args['start'] ) or 1; |
||
Line 154: | Line 155: | ||
local pattern = new_args['pattern'] or ''; |
local pattern = new_args['pattern'] or ''; |
||
local match_index = math.floor( tonumber(new_args['match']) or 1 ); |
local match_index = math.floor( tonumber(new_args['match']) or 1 ); |
||
local nomatch = new_args['nomatch']; |
|||
if s == '' then |
if s == '' then |
||
Line 204: | Line 206: | ||
if result == nil then |
if result == nil then |
||
if nomatch == nil then |
|||
return str._error( 'Match not found' ); |
|||
else |
|||
return nomatch; |
|||
end |
|||
else |
else |
||
return result; |
return result; |