Need to remove specific parameter from url
I am new to the Lua library, I have one use case which I have to remove on a specific parameter and its value: for example:
String 1 : ?xyz=true&toekn=4234dadsasda
String 2 : ?toekn=4234dadsasda&test=pass
Need output like this after removing token and its value
String 1 : ?xyz=true
String 2 : ?test=pass
I have tried the below Lua gsub function but no luck:
string.gsub(args, "token=.*", " ")
any help apricated, thanks
2 answers
-
answered 2021-02-22 22:43
Wiktor Stribiżew
If you can only have two query params and no more than two as shown in your input you can use
text:gsub("&?token=[^&]+&?", "")
Or, if you have multiple query params, you can use
text:gsub("([&?])token=[^&]+&?", "%1"):gsub("(.*)&$", "%1")
See the online Lua demo #1 and the online Lua demo #2.
Details:
&?
- an optional&
token=
- a literal string[^&]+
- one or more chars other than&
&?
- an optional&
char.
In the second solution,
:gsub("([&?])token=[^&]+&?", "%1")
replaces the match with either?
or&
before thetoken
, and the nextgsub("(.*)&$", "%1")
removes the&
at the end of string in case the param occurs at the end of string. -
answered 2021-02-23 06:11
Paul Kulchenko
You may want to considers additional conditions (using
&
and;
as separators[1]) and corner cases (trailing separators and substrings withtoken
):text:gsub("([&;]?)%f[%a]token=[^&;]+([&;]?)", function(s1, s2) return s1 and s2 and #(s1..s2) > 1 and s1 or "" end)
This solution works correctly on query strings that include parameters like
subtoken
and that use;
as separators. The template is using%f[%a]
, which is a frontier pattern that describes a zero-length boundary where non-letter changes to a letter (this includes the first character in a string).[1] W3C recommends that all web servers support semicolon separators in addition to ampersand separators to allow application/x-www-form-urlencoded query strings in URLs within HTML documents without having to entity escape ampersands (wikipedia article on query string).