gpt4 book ai didi

java - android java,正则表达式条件替换匹配的子内容(如javascript的str.replace(pattern,function(){})

转载 作者:行者123 更新时间:2023-11-30 03:14:16 24 4
gpt4 key购买 nike

需要在 Java 中使用正则表达式进行条件替换(如果在 javascript 中执行,请参见下面的示例)。找不到使用 Java 的简单方法。任何人都知道在 Java 中是否有等效的函数/回调来执行此操作?

问题是在 Android 上它需要找到一个与其中的特定标记匹配的 img 标签,如果找到该标签,则需要修改 src 部分。问题是 img 标签也可能有不同的属性,它们应该被保留。它们可以位于 img 标签内的随机位置。而src是未知的,只知道应该修改。所以它在img标签中寻找token属性,修改其中的src部分。

(img attribute1 token="这是 token " style="width:100px;......"src="http://...... ” 一些其他属性/)

(img src="http://......" attribute1 token="这是 token " someOtherAttributes style="width:100px; ……”/)

结果只会修改 src,比如(img src="http://....../pathabc" attribute1 token="this is the token"someOtherAttributes style="width:100px;......"/)

在 javascript 中你可能想要做

var passedInToken = "this is the token";
var srcPath = "/pathabc";
var regex = new RegExp("(?:<img\\s)([^<]*)(?:token=\""+passedInToken+"\"\\s*)([^>]*)>", "gi");
var foundToken = regex.test(testSourceHtmlString);
if (foundToken) {
var testSourceHtmlString = testSourceHtmlString.replace(regex, function(matchStr, grp1, grp2){
var attributeStrToBeReserved = grp1+" "+grp2;
var findSrcRegex = new RegExp("(src=\".*?\")");
if (findSrcRegex.test(attributeStrToBeReserved)){
attributeStrToBeReserved = attributeStrToBeReserved.replace(srcRegex, function(match, g1){
return g1 + srcPath;
});
}
return "<img token=\""+passedInToken+"\""+attributeStrToBeReserved+">";

});
}

最佳答案

看起来使用匹配器可能有助于获得相同的结果。有更好的方法吗?

    String passedInToken = "this is the token";
String srcPath = "/pathabc";
StringBuffer sb = new StringBuffer();
String srcPatternString = "(src=\".*?\")";
Pattern srcPattern = Pattern.compile(srcPatternString);

String patternString = "(?:<img\\s)([^<]*)(?:token=\""+passedInToken+"\"\\s*)([^>]*)>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(htmlStr);

while(matcher.find()) {

String srcPart = matcher.group(1) + " " + matcher.group(2);

StringBuffer srcSb = new StringBuffer();
Matcher strMatcher = srcPattern.matcher(srcPart);
while (strMatcher.find()) {
strMatcher.appendReplacement(srcSb, strMatcher.group(1)+ srcPath);
}
strMatcher.appendTail(srcSb);
String srcStr = "<img \"" + srcSb.toString() + ">";
matcher.appendReplacement(sb, srcStr);
}
matcher.appendTail(sb);
String newHtmlStr = sb.toString();

关于java - android java,正则表达式条件替换匹配的子内容(如javascript的str.replace(pattern,function(){}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com