The documentation of
string.gsub, on the string library page, contains no description of what the function should do that you can pass as the third repl argument. The function takes a capture of the given pattern. If the function returns a string, the value returned is substituted back into the string, like so:
local s = "spoil this, spoil that, spoil everything!" s = s:gsub("spoil", function(capture) return "[spoiler]" .. capture .. "[/spoiler]" end) print(s) --> [spoiler]spoil[/spoiler] this, [spoiler]spoil[/spoiler] that, [spoiler]spoil[/spoiler] everything!
Currently, it is only mentioned that you can pass a function, not what it should take/return: