比较和替换在JavaScript中使用正则表达式:在中间留下一个词

comparing and replacing using regex in javascript : leaving a word in between

本文关键字:正则表达式 在中间 下一个 替换 JavaScript 比较      更新时间:2023-09-26

我正在尝试替换如下所示的模式:源语言:

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

一个简单的

怎么样

text.replaceAll("#idvalue","javascript:call('idvalue')")

仅适用于这种情况。如果您希望做一些更全面的事情,那么正如另一个答案中所建议的那样,XML 解析器将是理想的选择。

尝试获取可能更改的部分,并且您希望保留为一个组,例如:

text = text.replaceAll( "href='"#(.*?)'"", "href='"javascript:call('$1')" );

这基本上匹配并替换了href="whatever",通过捕获组 1 捕获whatever,并使用 $1 作为对组 1 内容的引用重新插入替换字符串。

请注意,将正则表达式应用于HTML和Javascript可能很棘手(允许单引号或双引号,注释,嵌套元素等(,因此最好使用html解析器。

将捕获组添加到匹配器正则表达式,然后在替换中引用该组。我发现使用 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);

结果:

输入: welcome
output: welcome