From a95be1943d57fc0187109434911ca09b821e1e96 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 29 Sep 2021 13:10:09 +0800 Subject: [PATCH] feat: use 28586 to escape $ notation --- parser.go | 8 ++++++++ parser_test.go | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/parser.go b/parser.go index e3800de7..01c9d04a 100644 --- a/parser.go +++ b/parser.go @@ -69,6 +69,14 @@ func parseString(raw string, variablesMapping map[string]interface{}) interface{ parsedString += remainedString[0:startPosition] remainedString = remainedString[startPosition:] + // search $$, use $$ to escape $ notation + if strings.HasPrefix(remainedString, "$$") { // found $$ + matchStartPosition += 2 + parsedString += "$" + remainedString = remainedString[2:] + continue + } + // search variable like ${var} or $var varMatched := regexCompileVariable.FindStringSubmatch(remainedString) if len(varMatched) == 3 { diff --git a/parser_test.go b/parser_test.go index 1de295aa..bbf29c48 100644 --- a/parser_test.go +++ b/parser_test.go @@ -109,10 +109,18 @@ func TestParseDataStringWithVariablesAbnormal(t *testing.T) { expr string expect interface{} }{ - {"ABC$var_1{", "ABCabc{"}, - {"{ABC$var_1{}a}", "{ABCabc{}a}"}, - {"AB{C$var_1{}a}", "AB{Cabc{}a}"}, - {"ABC$var_1}", "ABCabc}"}, + {"ABC$var_1{", "ABCabc{"}, // { + {"ABC$var_1}", "ABCabc}"}, // } + {"{ABC$var_1{}a}", "{ABCabc{}a}"}, // {xx} + {"AB{C$var_1{}a}", "AB{Cabc{}a}"}, // {xx{}x} + {"ABC$$var_1{", "ABC$var_1{"}, // $$ + {"ABC$$$var_1{", "ABC$abc{"}, // $$$ + {"ABC$$$$var_1{", "ABC$$var_1{"}, // $$$$ + {"ABC$var_1${", "ABCabc${"}, // ${ + {"ABC$var_1${a", "ABCabc${a"}, // ${ + {"ABC$var_1$}a", "ABCabc$}a"}, // $} + {"ABC$var_1}{a", "ABCabc}{a"}, // }{ + {"ABC$var_1{}a", "ABCabc{}a"}, // {} } for _, data := range testData {