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/1Below 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.
You can use the regex.FindAllStringSubmatch
.
Following function would do the job, the function assumes the input to be a single string like "random token" 32
func parse(str string) (string, string) {
regex, _ := regexp.Compile(`("[^"]*")\s*(\S*)`)
submatches := regex.FindAllStringSubmatch(str, -1)
if len(submatches) == 0 {
return "",""
}
return submatches[0][1], submatches[0][2]
}
You can find working link to a sample program here