I'm trying to build a plugin which accepts parameters and each of the parameters can be a double quoted string or a non double quoted string.
Some examples of valid parameters :
"random token"
"random token" 34
"randomtoken"
So I'm trying to write a parseParameters
function which would return two values, one is the content inside double quoted string and the other is the non double quoted string.
I tried solving this problem with two regular expressions
-
\"(.*?)\"\s*\d*
- https://regex101.com/r/uB4sI9/145 -
\"(.*?)\"
- https://regex101.com/r/Pnh9Xd/1
Below is one version of the code I tried (which didn't work for some cases though) :
Variable parameters
in the below code is going to be a list. Something like ["\"random, "token\"", "45"]
paramString := strings.Join(parameters, " ")
regex, _ := regexp.Compile(`\"(.*?)\"\s*\d*`)
tempString := regex.FindString(paramString)
if len(parameters) == 1 && tempString != "" {
tempString = strings.TrimLeft(strings.TrimRight(tempString, `\"`), `\"`)
return tempString, "", true
}
if paramString != tempString {
return "", "", false
}
splitBySpace := strings.Split(tempString, " ")
doubleQuoted := strings.TrimLeft(strings.TrimRight(tempString, `\"`), `\"`)
nonDoubleQuoted := splitBySpace[len(splitBySpace)-1]
return doubleQuoted, nonDoubleQuoted, true
Expected input and output:
Input : ["\"random", "token\""]
Output : "random token", ""
(first value specifies the double quoted string while the other value specifies the non double quoted string)
Input : ["\"random", "token\"", "45"]
Output : ["\"random token\"", 45]
Note that double quotes are escaped in the input.