2012-05-30 71 views
1

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

+0

那么用户目前不在http://m.mydom.com上? – scottheckel

+0

绑定数据,如何? – Nalaka526

回答

8

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

HTML附带一个名为base (see spec information)的元素,用于明确指定文档的基本URI。如果您将HTML更改为以下内容:

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

图像和锚都将指向正确的底部。不要相信我?看看这个jsFiddle demonstating the amazingness of base

+1

+1 great tips :) –

1

不能只使用String.Replace

var s = "<a href=\"https://stackoverflow.com/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"); 

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

1

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

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

(?<=...)是回顾后; $0是捕获组0的内容,它是替换之前链接的内容。