Java替换标记中的链接

时间:2017-06-02 08:04:05

标签: java string replaceall

我有

String s = "<a href="https://stackoverflow.com">https://stackoverflow.com</a><br/><a href="https://google.com">https://google.com</a>"

现在我只想替换href属性中的所有链接,前缀为固定值(例如`abc.com?')。这是我想要的结果:

String s = "<a href="abc.com?url=https://stackoverflow.com">https://stackoverflow.com</a><br/><a href="abc.com?url=https://google.com">https://google.com</a>"

我尝试了以下操作,但它没有解决问题,因为它取代了以http://属性开头的所有字符串:

href

我只能在属性中替换,而不是在其他内容中替换?

2 个答案:

答案 0 :(得分:0)

您可以使用HTML解析器,例如JSoup

String s = "<a href="https://stackoverflow.com">https://stackoverflow.com</a>";
Document document = JSoup.parse(s);
Elements anchors = document.getElementsByTag("a");
anchors.get(0).attr("href", "...new href...");

或者,如果重量太大,正则表达式就足够了:

<a href="(?<url>[^"]+)">(?<text>[^<]+)<\/a>

请注意,如果您不关心text群组,请将?<text>替换为?:

只需替换url&amp; text小组使用与this answer

类似的方法

答案 1 :(得分:0)

正如RealSkeptic所说,寻找href而不是链接本身,它可以节省很多精力。

var s = '<a href="http://stackoverflow.com">https://stackoverflow.com</a><br/><a href="https://google.com">https://google.com</a>';

s = s.replace(/href="/g,"href=\"abc.com&url=" );

console.log(s);