diff --git a/src/jsonata/tokenizer.py b/src/jsonata/tokenizer.py index bf77a48..7ff37b4 100644 --- a/src/jsonata/tokenizer.py +++ b/src/jsonata/tokenizer.py @@ -138,7 +138,10 @@ def scan_regex(self) -> re.Pattern: start = self.position while current_char == 'i' or current_char == 'm': self.position += 1 - current_char = self.path[self.position] + if self.position < self.length: + current_char = self.path[self.position] + else: + current_char = None flags = self.path[start:self.position] + 'g' # Convert flags to Java Pattern flags diff --git a/tests/string_test.py b/tests/string_test.py index 9b09b21..7eb4deb 100644 --- a/tests/string_test.py +++ b/tests/string_test.py @@ -38,6 +38,10 @@ def test_replace(self): assert jsonata.Jsonata("$replace('h.ello', '.', '')").evaluate(None) == "hello" assert jsonata.Jsonata("$replace('h.e.l.l.o', '.', '',2)").evaluate(None) == "hel.l.o" + def test_regex(self): + assert (jsonata.Jsonata("($matcher := $eval('/^' & 'foo' & '/i'); $.$spread()[$.$keys() ~> $matcher])") + .evaluate({"foo": 1, "bar": 2}) == {"foo": 1}) + # # Additional $split tests #