[JS] Support named capture groups in Regex #KT-51775
This commit is contained in:
committed by
Space
parent
cf79752c14
commit
c3f5d03b36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 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}") }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user