| /* |
| * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. |
| */ |
| |
| package test.text |
| |
| import kotlin.test.* |
| |
| class RegexJsTest { |
| @Test |
| fun replace() { |
| // js capturing group name can contain Unicode letters, $, _, and digits (0-9), but may not start with a digit. |
| // jvm capturing group name can contain a-z, A-Z, and 0-9, but may not start with a digit. |
| // make sure reference to capturing group name in K/JS Regex.replace(input, replacement) obeys K/JVM rules |
| val input = "123-456" |
| Regex("(?<first_part>\\d+)-(?<second_part>\\d+)").let { regex -> |
| assertEquals("123/456", regex.replace(input, "$1/$2")) |
| assertEquals("123/456", regex.replaceFirst(input, "$1/$2")) |
| |
| assertEquals("123/456", regex.replace(input, "\${first_part}/\${second_part}")) |
| assertEquals("123/456", regex.replaceFirst(input, "\${first_part}/\${second_part}")) |
| } |
| Regex("(?<\$first>\\d+)-(?<\$second>\\d+)").let { regex -> |
| assertEquals("123/456", regex.replace(input, "\${\$first}/\${\$second}")) |
| assertEquals("123/456", regex.replaceFirst(input, "\${\$first}/\${\$second}")) |
| |
| assertFailsWith<IllegalArgumentException> { regex.replace(input, "\${first}/\${second}") } |
| assertFailsWith<IllegalArgumentException> { regex.replaceFirst(input, "\${first}/\${second}") } |
| } |
| Regex("(?<first>\\d+)-(?<second>\\d+)").let { regex -> |
| assertFailsWith<IllegalArgumentException> { regex.replace(input, "\${\$first}/\${\$second}") } |
| assertFailsWith<IllegalArgumentException> { regex.replaceFirst(input, "\${\$first}/\${\$second}") } |
| } |
| } |
| } |