正则表达式:匹配并替换字符串中的模式,同时在替换的字符串中保留匹配字符串的一部分

时间:2012-10-23 09:45:29

标签: java javascript regex

我有一个像

这样的字符串
@jhon.p @[User:151|Jhon Carter] Jhon Carter @sunil.p @[User:102|Sunil Nadar] Sunil Nadar

我想将javascript或Java中的正则表达式应用于上面的字符串以获得输出

@jhon.p <a href="#/users/151">Jhon Carter</a> @sunil.p <a href="#/users/102">Sunil Nadar</a>

知道我该怎么做吗?

2 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式匹配

@\[User:(\d+)\|(.*?)\]\s*\2

然后您可以使用它来替换$ 1 $ 2引用组的位置。

<a href="#/users/$1">$2</a>

答案 1 :(得分:1)

这是为您完成工作的Java代码:

String str =
 "@jhon.p @[User:151|Jhon Carter] Jhon Carter @sunil.p @[User:102|Sunil Nadar] Sunil Nadar";
Matcher m = Pattern.compile("@\\[User:(\\d+)\\|([^]]+)\\]\\s+\\2").matcher(str);
StringBuffer buf = new StringBuffer();
while (m.find()) {
   String link = "<a href=\"#/users/" + m.group(1) + "\">" + m.group(2) + "</a>";
   m.appendReplacement(buf, link);
}
m.appendTail(buf);
System.out.printf("Converted String is: %s%n", buf);

<强>输出:

Converted String is: @jhon.p <a href="#/users/151">Jhon Carter</a> @sunil.p <a href="#/users/102">Sunil Nadar</a>
相关问题