在javascript中比较和替换使用正则表达式:在两者之间保留一个单词
我正在尝试替换以下模式: 原件:在javascript中比较和替换使用正则表达式:在两者之间保留一个单词,javascript,regex,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
<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()\"");
String text=”“;
Pattern linkPattern=Pattern.compile(“a href=\”#);
text=linkPattern.matcher(text.replaceAll)(“a href=\”javascript:call()\”);
但无法在两者之间添加idvalue。请帮助我。
提前感谢。尝试获取可能更改的零件,并将其作为一个组保留,例如:
text = text.replaceAll( "href=\"#(.*?)\"", "href=\"javascript:call('$1')" );
这基本上是将捕获组1的href=“where”
匹配并替换为where
,并使用$1
作为组1内容的引用重新插入替换字符串
请注意,将正则表达式应用于HTML和Javascript可能很棘手(允许使用单引号或双引号、注释、嵌套元素等),因此最好使用HTML解析器。简单的
text.replaceAll("#idvalue","javascript:call('idvalue')")
仅适用于这种情况。如果您希望做更全面的工作,那么正如另一个答案中所建议的,XML解析器将是理想的选择。将捕获组添加到matcher正则表达式中,然后在replacemet中引用该组。我发现使用时,您需要使用“$”而不是“\”来访问替换中的捕获组。 代码:
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);
String text=”“;
System.out.println(“输入:+文本);
Pattern linkPattern=Pattern.compile(“a href=\”#([^\“]+)\”);
text=linkPattern.matcher(text.replaceAll(“a href=\”javascript:call(“$1”)\”);
System.out.println(“输出:+文本);
结果:输入:
输出:也许这是有用的: