在javascript中使用正则表达式进行比较和替换:在两者之间留下一个单词

时间:2015-10-28 15:02:03

标签: javascript regex

我正在尝试替换如下的模式: 原文:

<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。请帮助我。 提前谢谢。

3 个答案:

答案 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;