You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Groovy中如何简洁提取{{}}包裹的字符串内容?

在Jenkins Groovy中提取{{}}中的内容

你的问题核心是用正则捕获字符串中{{ }}包裹的内容,之前的写法有两个问题:一是Groovy字符串没有regex()方法,二是正则没做分组捕获,而且贪婪匹配可能导致结果不符合预期。下面给你两种简洁可靠的实现方式:

单个匹配场景(字符串中只有一个{{}})

直接用Groovy的正则匹配操作符=~创建Matcher,捕获中间内容后提取:

def line = "The sun slowly descended below the horizon, casting vibrant hues of orange and {{ pink }} across the tranquil sea."
// 创建正则匹配器,用非贪婪捕获组匹配{{}}之间的内容
def matcher = line =~ /\{\{(.*?)\}\}/
if (matcher.find()) {
    def findColor = matcher.group(1).trim() // trim去掉前后多余空格
    println(findColor) // 输出: pink
}
  • \{\{和\}\}是转义后的大括号(因为大括号在正则里是量词符号,必须转义)
  • (.*?)是非贪婪捕获组,会匹配到第一个}}就停止,避免多个{{}}时匹配错误
  • group(1)获取捕获组里的内容,trim()根据需求可选(如果你的{{}}中间有空格的话)

多个匹配场景(字符串中有多个{{}})

如果要提取所有{{}}里的内容,可以用更简洁的collect写法一次性获取:

def line = "The {{ sun }} slowly descended below the {{ horizon }}, casting vibrant hues of {{ orange }} and {{ pink }} across the tranquil sea."
// 遍历所有匹配项,提取并整理成列表
def allMatches = (line =~ /\{\{(.*?)\}\}/).collect { match -> match[1].trim() }
println(allMatches) // 输出: [sun, horizon, orange, pink]

为什么你之前的写法不生效?

  1. Groovy字符串没有regex()方法,正确的正则匹配方式是用=~(部分匹配)或==~(全匹配)
  2. 你写的.*{{.*}}.*是匹配整个字符串的正则,没有设置捕获组,所以无法提取中间内容;而且.*是贪婪匹配,如果有多个{{}},会直接匹配到最后一个}},结果不符合预期

内容的提问来源于stack exchange,提问作者TheDESTROS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:38:32