diff --git a/spec/search/lexer.spec.js b/spec/search/lexer.spec.js index 1fc918259..3d259d308 100644 --- a/spec/search/lexer.spec.js +++ b/spec/search/lexer.spec.js @@ -49,6 +49,22 @@ describe("Lexer expression", () => { .toEqual(["#label", "*=*", "text"]); }); + it("simple label operator with in quotes and without", () => { + expect(lexer("#label*=*'text'").expressionTokens) + .toEqual([ + {token: "#label", inQuotes: false}, + {token: "*=*", inQuotes: false}, + {token: "text", inQuotes: true} + ]); + + expect(lexer("#label*=*text").expressionTokens) + .toEqual([ + {token: "#label", inQuotes: false}, + {token: "*=*", inQuotes: false}, + {token: "text", inQuotes: false} + ]); + }); + it("complex expressions with and, or and parenthesis", () => { expect(lexer(`# (#label=text OR #second=text) AND ~relation`).expressionTokens.map(t => t.token)) .toEqual(["#", "(", "#label", "=", "text", "or", "#second", "=", "text", ")", "and", "~relation"]); diff --git a/src/services/search/lexer.js b/src/services/search/lexer.js index cd45f7421..fb6f09e4d 100644 --- a/src/services/search/lexer.js +++ b/src/services/search/lexer.js @@ -28,7 +28,7 @@ function lexer(str) { const rec = { token: currentWord, - inQuotes: quotes + inQuotes: !!quotes }; if (fulltextEnded) { @@ -71,9 +71,9 @@ function lexer(str) { } } else if (quotes === chr) { - quotes = false; - finishWord(); + + quotes = false; } else { // it's a quote but within other kind of quotes so it's valid as a literal character