我正在尝试替换如下的模式: 原文:
<a href="#idvalue">welocme</a>
需要替换为:
<a href="javascript:call('idvalue')">welcome</a>
尝试了以下方法:
String text = "<a href=\"#idvalue\">welocme</a>";
Pattern linkPattern = Pattern.compile("a href=\"#");
text = linkPattern.matcher(text).replaceAll("a href=\"javascript:call()\"");
但无法在中间添加idvalue。请帮助我。 提前谢谢。
答案 0 :(得分:1)
尝试获取可能会更改的部分,并希望将其保留为一个组,例如像这样:
text = text.replaceAll( "href=\"#(.*?)\"", "href=\"javascript:call('$1')" );
这基本匹配并替换href="whatever"
,捕获组1捕获whatever
,并使用$1
作为对组1内容的引用,重新插入替换字符串。
请注意,将正则表达式应用于HTML和Javascript可能会很棘手(允许使用单引号或双引号,注释,嵌套元素等),因此最好使用html解析器。
答案 1 :(得分:1)
如何简单
text.replaceAll("#idvalue","javascript:call('idvalue')")
仅适用于此案例。如果您希望做更全面的事情,那么正如另一个答案中所建议的那样,XML解析器将是理想的。
答案 2 :(得分:0)
将捕获组添加到匹配器正则表达式,然后引用替换中的组。我发现使用JavaDoc for Matcher,您需要使用'$'而不是'\'来访问替换中的捕获组。
代码:
String text = "<a href=\"#idvalue\">welcome</a>";
System.out.println("input: " + text);
Pattern linkPattern = Pattern.compile("a href=\"#([^\"]+)\"");
text = linkPattern.matcher(text).replaceAll("a href=\"javascript:call('$1')\"");
System.out.println("output: " +text);
结果:
输入:&lt; a href =“#idvalue”&gt; welcome&lt; / a&gt;
输出:&lt; a href =“javascript:call('idvalue')”&gt; welcome&lt; / a&gt;