2012-05-30 5 views
1

저는 꽤 긴 문자열을 가지고 있습니다. 문자열을 데이터 바인딩하기 전에 더 많은 텍스트를 삽입하여 문자열을 수정할 수 있어야합니다. 예를 들어, 문자열이 있습니다. <a href="https://stackoverflow.com/a/info/a.html"><img src="/userimage/imgs.jpg"/></a>http://m.mydom.com을/a 앞에 삽입하고/userimage를 삽입해야합니다. 참고로, 이것은 항상 동일하므로 추가하고자하는 문자열이 일관성이 있다고 말할 수 있습니다. 나는 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 멋진 팁 :) –

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"); 

가장 좋은 방법은 아니지만 항상 RegEx를 사용할 수 있습니다.

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")); 

(?<=...)는 lookbehind이다; $0은 캡쳐 그룹 0의 내용으로 대체하기 전에 링크의 내용입니다.