diff --git a/src/main/java/com/dashjoin/jsonata/Tokenizer.java b/src/main/java/com/dashjoin/jsonata/Tokenizer.java index 503373d..1acbad3 100644 --- a/src/main/java/com/dashjoin/jsonata/Tokenizer.java +++ b/src/main/java/com/dashjoin/jsonata/Tokenizer.java @@ -142,7 +142,11 @@ Pattern scanRegex() { start = position; while (currentChar == 'i' || currentChar == 'm') { position++; - currentChar = path.charAt(position); + if (position < length) { + currentChar = path.charAt(position); + } else { + currentChar = 0; + } } flags = path.substring(start, position) + 'g'; diff --git a/src/test/java/com/dashjoin/jsonata/StringTest.java b/src/test/java/com/dashjoin/jsonata/StringTest.java index 2ca01e6..5009b4d 100644 --- a/src/test/java/com/dashjoin/jsonata/StringTest.java +++ b/src/test/java/com/dashjoin/jsonata/StringTest.java @@ -127,6 +127,13 @@ public void evalTest() { + " $eval('$data.Wert1')\n" + ")").evaluate(null)); } + + @Test + public void regexTest() { + Assertions.assertEquals(Map.of("foo", 1), jsonata( + "($matcher := $eval('/^' & 'foo' & '/i'); $.$spread()[$.$keys() ~> $matcher])") + .evaluate(Map.of("foo", 1, "bar", 2))); + } @Disabled @Test