我有来自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}是变量
答案 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:
后至少有一位十六进制数字。