1

我有一个很长的字符串。在对字符串进行数据绑定之前,我希望能够通过插入更多文本来修改字符串。例如,我有一个字符串,<a href="/a/info/a.html"><img src="/userimage/imgs.jpg"/></a>我需要在 /a 之前和 /userimage 之前插入http://m.mydom.com 。请注意,这将始终相同,因此可以肯定地说我要添加的字符串将是一致的。我想用 lamda 或只用 c# 来做这件事。谢谢你的帮助。

4

3 回答 3

8

如果您需要对页面上的所有相对路径执行此操作,则使用 C# 来完成此操作实际上并不是最好的工具。

HTML 带有一个名为base(参见规范信息)的元素,用于显式指定文档的基本 URI。如果您将 HTML 更改为以下内容:

<head>
    <base href="http://m.mydom.com">
</head>
<body>
    <a href="/a/info/a.html"><img src="/userimage/imgs.jpg"/></a>
</body>

图像和锚点都将指向正确的基础。不相信我?看看这个jsFiddle 展示了base.

于 2012-05-30T02:42:01.907 回答
1

你不能只使用String.Replace吗?

var s = "<a href=\"/a/info/a.html\"><img src=\"/userimage/imgs.jpg\"/></a>";
s.Replace("\"/a","\"http://m.mydom.com/a").Replace("\"/userimage", "\"http://m.mydom.com/userimage");

不是最好的方法,你总是可以使用正则表达式。

于 2012-05-30T02:38:46.623 回答
1

您可以使用一个简单的正则表达式:

var regex = new Regex("(?<=(src|href)=\")([^\"]*)");
var s = "<a href=\"/a/info/a.html\"><img src=\"/userimage/imgs.jpg\"/></a>";
Console.WriteLine(regex.Replace(s, "http://m.mydom.com$0"));

(?<=...)是向后看;$0是捕获组0的内容,也就是替换前的链接内容。

于 2012-05-30T02:47:58.113 回答