diff --git a/libraries/stdlib/js/src/kotlin/text/regex.kt b/libraries/stdlib/js/src/kotlin/text/regex.kt index 2b37102f1d3..03106f15428 100644 --- a/libraries/stdlib/js/src/kotlin/text/regex.kt +++ b/libraries/stdlib/js/src/kotlin/text/regex.kt @@ -70,9 +70,15 @@ public actual class Regex actual constructor(pattern: String, options: Set input.length) { + throw IndexOutOfBoundsException("Start index out of bounds: $startIndex, input length: ${input.length}") + } + return nativePattern.findNext(input.toString(), startIndex) + } /** * Returns a sequence of all occurrences of a regular expression within the [input] string, beginning at the specified [startIndex]. diff --git a/libraries/stdlib/test/text/RegexTest.kt b/libraries/stdlib/test/text/RegexTest.kt index 1dd5a603cc5..72b7ef919c8 100644 --- a/libraries/stdlib/test/text/RegexTest.kt +++ b/libraries/stdlib/test/text/RegexTest.kt @@ -48,6 +48,10 @@ class RegexTest { val noMatch = last.next() assertEquals(null, noMatch) + + assertFailsWith { p.find(input, -1) } + assertFailsWith { p.find(input, input.length + 1) } + assertEquals(null, p.find(input, input.length)) } @Test fun matchIgnoreCase() { @@ -82,6 +86,7 @@ class RegexTest { assertEquals(2, matches.size) assertEquals("", pattern.findAll(input, input.length).single().value) + assertEquals("", pattern.find(input, input.length)?.value) } @Test fun matchGroups() {