使用链接

时间:2016-12-01 16:47:37

标签: regex string groovy substitution

我有来自git log in variable的多行字符串 并希望用超链接替换匹配的行 但是用Groovy保留原始字符串的某些部分。

示例:

commit 7a1825abc69f1b40fd8eb3b501813f21e09bfb54
Author: Filip Stefanov 
Date:   Mon Nov 21 11:05:08 2016 +0200

    TICKET-1

    Test change

    Change-Id: I7b4028e504de6c4a48fc34635d4b94ad038811a6

应该是这样的:

commit 7a1825abc69f1b40fd8eb3b501813f21e09bfb54
Author: Filip Stefanov 
Date:   Mon Nov 21 11:05:08 2016 +0200

    <a href=http://localhost:8080/browse/TICKET-1>TICKET-1</a>

    Test change

    <a href=http://localhost:8081/#/q/I7b4028e504de6c4a48fc34635d4b94ad038811a6,n,z>Change-Id: I7b4028e504de6c4a48fc34635d4b94ad038811a6</a>

我在Groovy正则表达式中非常糟糕,不知道如何使用分组或闭包这么好:

mystring.replaceAll(/TICKET-/, "http://localhost:8080/browse/TICKET-")

注意: TICKET {int}和Change-Id {hash}是变量

1 个答案:

答案 0 :(得分:1)

mystring.replaceAll(/(TICKET-\d++)/, '<a href="http://localhost:8080/browse/$1">$1</a>')
        .replaceAll(/Change-Id: (I\p{XDigit}++)/, '<a href="http://localhost:8081/#/q/$1,n,z">Change-Id: $1</a>')

当然,您必须相应地更换动态部件。目前,TICKET-I之后至少有一位数,Change-ID:后至少有一位十六进制数字。