Я пытаюсь создать плагин, который принимает параметры, и каждый из параметров может быть строкой с двойными кавычками или строкой без двойных кавычек.
Некоторые примеры допустимых параметров:
"random token"
"random token" 34
"randomtoken"
Поэтому я пытаюсь написать функцию parseParameters
, которая бы возвращала два значенияодин - содержимое внутри строки с двойными кавычками, а другой - строка без двойных кавычек.
Я пытался решить эту проблему с помощью двух регулярных выражений
\"(.*?)\"\s*\d*
- https://regex101.com/r/uB4sI9/145 \"(.*?)\"
- https://regex101.com/r/Pnh9Xd/1
Ниже приведена одна из версий кода, который я пробовал (хотя в некоторых случаях он не работал):
Переменнаяparameters
в приведенном ниже коде будет список.Что-то вроде ["\" 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
Ожидаемый ввод и вывод :
Вход : ["\" random "," token \ ""]
Вывод : "random token", ""
(первое значение указывает строку в двойных кавычках, а другое значение указывает строку не в двойных кавычках)
Ввод : ["\" random "," token \ "", "45"]
Выход : ["\"случайный токен \ "", 45]
Обратите внимание, что двойные кавычки экранируются во входных данных.