Groovy:我需要扫描字符串以获取表单的子字符串:
${token}:<someValue>]
那是:
token
字符串(可以是运行时的任何内容);然后:
);然后<someValue>
);最后]
)所以基本上是这样的:
def String fetchTokenValue(String toScan, String token) {
if(toScan.matches(".*${token}:.*]")) {
String everythingBetweenColonAndRBracket = ???
return everythingBetweenColonAndRBracket
} else {
return 'NO_DICE'
}
}
这样输出如下:
fetchTokenValue('swkokd sw:defroko swodjejr blah:fizzbuzz] wdkerko', 'blah') => 'fizzbuzz'
fetchTokenValue('swkokd sw:defroko swodjejr blah:fizzbuzz] wdkerko', 'boo') => 'NO_DICE'
我正在努力学习正则表达式,以及如果匹配,如何在冒号和右方括号之间提取所有文本。我们可以假设只会有一个匹配,或者只是对找到的第一个匹配进行操作(如果存在)。
我出错的任何想法?
答案 0 :(得分:1)
您可以使用此正则表达式将一个var s = Snap("#MyPopup");
var image = null;
var mImagePath = "https://myimages.com/xyz.png";
if ( imageExists (mImagePath) == true ) {
image = s.image(mImagePath, 250, 10, 40,40 );
} else {
image = s.image("https://myimages.com/ImageNotFound.png", 250, 10, 40,40 );
}
function imageExists(image_url){
var http = new XMLHttpRequest();
http.open('HEAD', image_url, false);
http.send();
return http.status == 200;
}
内的任何内容抓取到一个组
]
答案 1 :(得分:1)
您可以使用def String fetchTokenValue(String toScan, String token) {
def match = toScan =~ /.+${token}:([^\]]+)/
if(match) { match[0][1] } else { 'NO_DICE' }
}
def str = 'swkokd sw:defroko swodjejr blah:fizzbuzz] wdkerko'
assert fetchTokenValue(str, 'blah') == 'fizzbuzz'
assert fetchTokenValue(str, 'boo') == 'NO_DICE'
子模式(一个否定的字符类[^\]]*
来匹配除其中定义的字符之外的任何字符)来匹配除[^...]
之外的零个或多个字符并使用捕获group捕获该文本并仅返回Group 1内容。此外,最好自动转义输入令牌,以避免非法的模式语法问题:
]